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

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

Issue 2015183003: Create ExecutableElementImpl.type lazily. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 7 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
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/summary/resynthesize.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/dart/element/element.dart
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 8c2085c9a3348c5edad40ccb1591dc65c1fc8a6a..746e88fb7d19d71e55b9371298dfc8a50f0d7df1 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -3114,9 +3114,16 @@ abstract class ExecutableElementImpl extends ElementImpl
}
@override
- FunctionType get type => _type;
+ FunctionType get type {
+ if (serializedExecutable != null) {
+ _type ??= new FunctionTypeImpl.elementWithNameAndArgs(
+ this, null, allEnclosingTypeParameterTypes, false);
+ }
+ return _type;
+ }
void set type(FunctionType type) {
+ assert(serializedExecutable == null);
_type = type;
}
@@ -5260,6 +5267,14 @@ class MethodElementImpl extends ExecutableElementImpl implements MethodElement {
}
@override
+ List<TypeParameterType> get allEnclosingTypeParameterTypes {
+ if (isStatic) {
+ return const <TypeParameterType>[];
+ }
+ return super.allEnclosingTypeParameterTypes;
+ }
+
+ @override
String get displayName {
String displayName = super.displayName;
if ("unary-" == displayName) {
@@ -6374,6 +6389,14 @@ class PropertyAccessorElementImpl extends ExecutableElementImpl
}
@override
+ List<TypeParameterType> get allEnclosingTypeParameterTypes {
+ if (isStatic) {
+ return const <TypeParameterType>[];
+ }
+ return super.allEnclosingTypeParameterTypes;
+ }
+
+ @override
PropertyAccessorElement get correspondingGetter {
if (isGetter || variable == null) {
return null;
@@ -6998,9 +7021,31 @@ class TypeParameterElementImpl extends ElementImpl
*/
abstract class TypeParameterizedElementMixin
implements TypeParameterizedElement, ElementImpl {
- List<TypeParameterType> _typeParameterTypes;
- List<TypeParameterElement> _typeParameterElements;
int _nestingLevel;
+ List<TypeParameterElement> _typeParameterElements;
+ List<TypeParameterType> _typeParameterTypes;
+ List<TypeParameterType> _allTypeParameterTypes;
+
+ /**
+ * Return all type parameter types of the element that encloses element.
+ * Not `null`, but might be empty for top-level and static class members.
+ */
+ List<TypeParameterType> get allEnclosingTypeParameterTypes {
+ return enclosingTypeParameterContext?.allTypeParameterTypes ??
+ const <TypeParameterType>[];
+ }
+
+ /**
+ * Return all type parameter types of this element.
+ */
+ List<TypeParameterType> get allTypeParameterTypes {
+ if (_allTypeParameterTypes == null) {
+ _allTypeParameterTypes = <TypeParameterType>[];
+ _allTypeParameterTypes.addAll(typeParameterTypes);
+ _allTypeParameterTypes.addAll(allEnclosingTypeParameterTypes);
Paul Berry 2016/05/27 17:04:50 This order seems backwards. Shouldn't we list out
+ }
+ return _allTypeParameterTypes;
+ }
/**
* Get the type parameter context enclosing this one, if any.
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/summary/resynthesize.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698