| Index: pkg/analyzer/lib/src/summary/summarize_elements.dart
|
| diff --git a/pkg/analyzer/lib/src/summary/summarize_elements.dart b/pkg/analyzer/lib/src/summary/summarize_elements.dart
|
| index 13d568870817c9f97de5ac933963014ac6dd8554..76b66dddd4b1c8840d1f274cce24a9d016d4a17f 100644
|
| --- a/pkg/analyzer/lib/src/summary/summarize_elements.dart
|
| +++ b/pkg/analyzer/lib/src/summary/summarize_elements.dart
|
| @@ -733,11 +733,22 @@ class _LibrarySerializer {
|
| } else if (type is FunctionType) {
|
| typeArguments = type.typeArguments;
|
| }
|
| - if (typeArguments != null &&
|
| - typeArguments.any((DartType argument) => !argument.isDynamic)) {
|
| - b.typeArguments = typeArguments
|
| - .map((DartType t) => serializeTypeRef(t, context))
|
| - .toList();
|
| + if (typeArguments != null) {
|
| + // Trailing type arguments of type 'dynamic' should be omitted.
|
| + int numArgsToSerialize = typeArguments.length;
|
| + while (numArgsToSerialize > 0 &&
|
| + typeArguments[numArgsToSerialize - 1].isDynamic) {
|
| + --numArgsToSerialize;
|
| + }
|
| + if (numArgsToSerialize > 0) {
|
| + List<UnlinkedTypeRefBuilder> serializedArguments =
|
| + <UnlinkedTypeRefBuilder>[];
|
| + for (int i = 0; i < numArgsToSerialize; i++) {
|
| + serializedArguments
|
| + .add(serializeTypeRef(typeArguments[i], context));
|
| + }
|
| + b.typeArguments = serializedArguments;
|
| + }
|
| }
|
| }
|
| return b;
|
|
|