| Index: pkg/analyzer/lib/src/summary/resynthesize.dart
|
| diff --git a/pkg/analyzer/lib/src/summary/resynthesize.dart b/pkg/analyzer/lib/src/summary/resynthesize.dart
|
| index 26068ac20e53ae391ff79e6ad7fcfd37421b2578..2df51d4c8d8b4ae6cff8f05ff7fbf1b558aa3c3a 100644
|
| --- a/pkg/analyzer/lib/src/summary/resynthesize.dart
|
| +++ b/pkg/analyzer/lib/src/summary/resynthesize.dart
|
| @@ -1285,14 +1285,23 @@ class _ReferenceInfo {
|
| InterfaceTypeImpl type =
|
| new InterfaceTypeImpl.elementWithNameAndArgs(element, name, () {
|
| if (typeArguments == null) {
|
| - typeArguments = element.typeParameters.map((typeParameter) {
|
| - DartType bound = typeParameter.bound;
|
| - return libraryResynthesizer.summaryResynthesizer.strongMode &&
|
| - instantiateToBoundsAllowed &&
|
| - bound != null
|
| - ? bound
|
| - : DynamicTypeImpl.instance;
|
| - }).toList();
|
| + typeArguments = element.typeParameters
|
| + .map/*<DartType>*/((_) => DynamicTypeImpl.instance)
|
| + .toList();
|
| + if (libraryResynthesizer.summaryResynthesizer.strongMode &&
|
| + instantiateToBoundsAllowed) {
|
| + List<DartType> typeParameterTypes;
|
| + for (int i = 0; i < typeArguments.length; i++) {
|
| + DartType bound = element.typeParameters[i].bound;
|
| + if (bound != null) {
|
| + typeParameterTypes ??= element.typeParameters
|
| + .map/*<DartType>*/((TypeParameterElement e) => e.type)
|
| + .toList();
|
| + typeArguments[i] =
|
| + bound.substitute2(typeArguments, typeParameterTypes);
|
| + }
|
| + }
|
| + }
|
| }
|
| return typeArguments;
|
| });
|
|
|