| Index: pkg/analyzer/lib/src/summary/link.dart
|
| diff --git a/pkg/analyzer/lib/src/summary/link.dart b/pkg/analyzer/lib/src/summary/link.dart
|
| index 41b011506c1433ee36b51d359601ae9674e13312..42f2994809b1d7ef8410b99ed8ff419c87951e94 100644
|
| --- a/pkg/analyzer/lib/src/summary/link.dart
|
| +++ b/pkg/analyzer/lib/src/summary/link.dart
|
| @@ -606,14 +606,14 @@ class ClassElementForLink_Class extends ClassElementForLink
|
| DartType getTypeArgument(int i), List<int> implicitFunctionTypeIndices) {
|
| int numTypeParameters = _unlinkedClass.typeParameters.length;
|
| if (numTypeParameters != 0) {
|
| - return new InterfaceTypeImpl.elementWithNameAndArgs(this, name, () {
|
| - List<DartType> typeArguments = new List<DartType>(numTypeParameters);
|
| - for (int i = 0; i < numTypeParameters; i++) {
|
| - typeArguments[i] =
|
| - getTypeArgument(i) ?? computeDefaultTypeArgument(i);
|
| - }
|
| - return typeArguments;
|
| - });
|
| + List<DartType> typeArguments =
|
| + new List<DartType>.generate(numTypeParameters, getTypeArgument);
|
| + if (typeArguments.contains(null)) {
|
| + return context.typeSystem.instantiateToBounds(this.type);
|
| + } else {
|
| + return new InterfaceTypeImpl.elementWithNameAndArgs(
|
| + this, name, () => typeArguments);
|
| + }
|
| } else {
|
| return _type ??= new InterfaceTypeImpl(this);
|
| }
|
| @@ -3177,12 +3177,15 @@ class FunctionTypeAliasElementForLink extends Object
|
| DartType getTypeArgument(int i), List<int> implicitFunctionTypeIndices) {
|
| int numTypeParameters = _unlinkedTypedef.typeParameters.length;
|
| if (numTypeParameters != 0) {
|
| - List<DartType> typeArguments = new List<DartType>(numTypeParameters);
|
| - for (int i = 0; i < numTypeParameters; i++) {
|
| - typeArguments[i] = getTypeArgument(i) ?? computeDefaultTypeArgument(i);
|
| + List<DartType> typeArguments =
|
| + new List<DartType>.generate(numTypeParameters, getTypeArgument);
|
| + if (typeArguments.contains(null)) {
|
| + return context.typeSystem
|
| + .instantiateToBounds(new FunctionTypeImpl.forTypedef(this));
|
| + } else {
|
| + return new FunctionTypeImpl.elementWithNameAndArgs(
|
| + this, name, typeArguments, true);
|
| }
|
| - return new FunctionTypeImpl.elementWithNameAndArgs(
|
| - this, name, typeArguments, true);
|
| } else {
|
| return _type ??= new FunctionTypeImpl.forTypedef(this);
|
| }
|
| @@ -4407,6 +4410,9 @@ abstract class ReferenceableElementForLink implements Element {
|
| */
|
| TypeInferenceNode get asTypeInferenceNode => null;
|
|
|
| + @override
|
| + ElementLocation get location => new ElementLocationImpl.con1(this);
|
| +
|
| /**
|
| * Return the type indicated by this element when it is used in a
|
| * type instantiation context. If this element can't legally be
|
|
|