Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(667)

Unified Diff: pkg/analyzer/lib/src/summary/link.dart

Issue 2376213003: Instantiate parameterized types of type parameters with 'dynamic' type arguments. (Closed)
Patch Set: Remove computeDefaultTypeArgument() and always use TypeSystem.instantiateToBounds(). Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/element.dart ('k') | pkg/analyzer/test/src/summary/resynthesize_ast_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698