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

Unified Diff: pkg/analyzer/lib/dart/element/type.dart

Issue 1758913002: Add instantiate method on ParameterizedType and InterfaceType. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address comments Created 4 years, 10 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/dart/element/type.dart
diff --git a/pkg/analyzer/lib/dart/element/type.dart b/pkg/analyzer/lib/dart/element/type.dart
index 3ff2ce83b166c11deb006c93d0a2f6897bfc3b5d..11c97e8d03b784a0c03045c0ff679983a79eb839 100644
--- a/pkg/analyzer/lib/dart/element/type.dart
+++ b/pkg/analyzer/lib/dart/element/type.dart
@@ -132,6 +132,15 @@ abstract class DartType {
bool isSupertypeOf(DartType type);
/**
+ * If this type is a [TypeParameterType], returns its bound if it has one, or
+ * [objectType] otherwise.
+ *
+ * For any other type, returns `this`. Applies recursively -- if the bound is
+ * itself a type parameter, that is resolved too.
+ */
+ DartType resolveToBound(DartType objectType);
+
+ /**
* Return the type resulting from substituting the given [argumentTypes] for
* the given [parameterTypes] in this type. The specification defines this
* operation in section 2:
@@ -150,15 +159,6 @@ abstract class DartType {
*/
DartType substitute2(
List<DartType> argumentTypes, List<DartType> parameterTypes);
-
- /**
- * If this type is a [TypeParameterType], returns its bound if it has one, or
- * [objectType] otherwise.
- *
- * For any other type, returns `this`. Applies recursively -- if the bound is
- * itself a type parameter, that is resolved too.
- */
- DartType resolveToBound(DartType objectType);
}
/**
@@ -242,10 +242,7 @@ abstract class FunctionType implements ParameterizedType {
*/
List<TypeParameterElement> get typeFormals;
- /**
- * Return the type resulting from instantiating (replacing) the given
- * [argumentTypes] for this function's bound type parameters.
- */
+ @override
FunctionType instantiate(List<DartType> argumentTypes);
/**
@@ -401,6 +398,9 @@ abstract class InterfaceType implements ParameterizedType {
*/
PropertyAccessorElement getSetter(String name);
+ @override
+ InterfaceType instantiate(List<DartType> argumentTypes);
+
/**
* Return `true` if this type is a direct supertype of the given [type]. The
* implicit interface of class <i>I</i> is a direct supertype of the implicit
@@ -633,12 +633,7 @@ abstract class InterfaceType implements ParameterizedType {
* type's parameters. This is fully equivalent to `substitute2(argumentTypes,
* getTypeArguments())`.
*/
- // TODO(jmesserly): introduce a new "instantiate" and deprecate this.
- // The new "instantiate" should work similar to FunctionType.instantiate,
- // which uses [typeFormals] to model type parameters that haven't been
- // filled in yet. Those are kept separate from already-substituted type
- // parameters or free variables from the enclosing scopes, which allows nested
- // generics to work, such as a generic method in a generic class.
+ @deprecated // use instantiate
InterfaceType substitute4(List<DartType> argumentTypes);
/**
@@ -665,7 +660,7 @@ abstract class InterfaceType implements ParameterizedType {
* This substitution will be propagated to its members. For example, say our
* `Foo<T>` class has a field `T bar;`. When we look up this field, we will get
* back a [FieldElement] that tracks the substituted type as `{S/T}T`, so when
- * we ask for the field type we will get`S`.
+ * we ask for the field type we will get `S`.
*
* Clients may not extend, implement or mix-in this class.
*/
@@ -684,6 +679,12 @@ abstract class ParameterizedType implements DartType {
* Return a list containing all of the type parameters declared for this type.
*/
List<TypeParameterElement> get typeParameters;
+
+ /**
+ * Return the type resulting from instantiating (replacing) the given
+ * [argumentTypes] for this type's bound type parameters.
+ */
+ ParameterizedType instantiate(List<DartType> argumentTypes);
}
/**
« no previous file with comments | « pkg/analysis_server/test/src/utilities/change_builder_dart_test.dart ('k') | pkg/analyzer/lib/src/dart/element/type.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698