Index: pkg/analyzer/lib/src/generated/resolver.dart |
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart |
index 720c8f44d1354974821ede9e353c1e2adec09e44..d3dbd3d3fde2f25c710476f740488e67670e69f2 100644 |
--- a/pkg/analyzer/lib/src/generated/resolver.dart |
+++ b/pkg/analyzer/lib/src/generated/resolver.dart |
@@ -8466,31 +8466,18 @@ class TypeNameResolver { |
return undefinedType; |
} else if (type is FunctionType) { |
Element element = type.element; |
- if (annotation is TypeName && element is GenericTypeAliasElement) { |
- List<TypeParameterElement> parameterElements = element.typeParameters; |
- FunctionType functionType = element.function.type; |
- if (parameterElements.isNotEmpty) { |
- List<DartType> parameterTypes = |
- TypeParameterTypeImpl.getTypes(parameterElements); |
- int parameterCount = parameterTypes.length; |
- TypeArgumentList argumentList = annotation.typeArguments; |
- List<DartType> typeArguments; |
- if (argumentList != null) { |
- List<TypeAnnotation> arguments = argumentList.arguments; |
- int argumentCount = arguments.length; |
- if (argumentCount == parameterCount) { |
- typeArguments = new List<DartType>(parameterCount); |
- for (int i = 0; i < parameterCount; i++) { |
- typeArguments[i] = _getType(arguments[i]); |
- } |
- } |
+ if (annotation is TypeName && element is GenericTypeAliasElementImpl) { |
+ TypeArgumentList argumentList = annotation.typeArguments; |
+ List<DartType> typeArguments = null; |
+ if (argumentList != null) { |
+ List<TypeAnnotation> arguments = argumentList.arguments; |
+ int argumentCount = arguments.length; |
+ typeArguments = new List<DartType>(argumentCount); |
+ for (int i = 0; i < argumentCount; i++) { |
+ typeArguments[i] = _getType(arguments[i]); |
} |
- typeArguments ??= |
- new List<DartType>.filled(parameterCount, dynamicType); |
- functionType = |
- functionType.substitute2(typeArguments, parameterTypes); |
} |
- return functionType; |
+ return element.typeAfterSubstitution(typeArguments); |
} |
} |
return type; |