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

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

Issue 1969943002: Resynthesize _DeferredClassElement 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
Index: pkg/analyzer/lib/src/dart/element/handle.dart
diff --git a/pkg/analyzer/lib/src/dart/element/handle.dart b/pkg/analyzer/lib/src/dart/element/handle.dart
index b922a4c59237daa4547131ae04e98e3d73224cdb..28c071677745ffa849884b07b98deb19548eaa40 100644
--- a/pkg/analyzer/lib/src/dart/element/handle.dart
+++ b/pkg/analyzer/lib/src/dart/element/handle.dart
@@ -98,29 +98,67 @@ class ClassElementHandle extends ElementHandle implements ClassElement {
List<TypeParameterElement> get typeParameters => actualElement.typeParameters;
@override
- ConstructorElement get unnamedConstructor => actualElement.unnamedConstructor;
+ ConstructorElement get unnamedConstructor {
+ ensureConstructorsReady();
+ return actualElement.unnamedConstructor;
+ }
@override
NamedCompilationUnitMember computeNode() => super.computeNode();
+ /**
+ * Ensure that [ClassElement.accessors] and [ClassElement.fields] are ready
+ * in [actualElement].
+ */
+ void ensureAccessorsReady() {}
+
+ /**
+ * The method is called by [ClassElementImpl.getImpl] before returning
+ * the [actualElement] as [ClassElementImpl]. At this moment we must ensure
+ * that [ClassElementImpl] is fully complete, we cannot continue filling it
+ * lazily.
+ */
+ void ensureActualElementComplete() {}
+
+ /**
+ * Ensure that [ClassElement.constructors] are ready in [actualElement].
+ */
+ void ensureConstructorsReady() {}
+
+ /**
+ * Ensure that [ClassElement.methods] are ready in [actualElement].
+ */
+ void ensureMethodsReady() {}
+
@override
- FieldElement getField(String fieldName) => actualElement.getField(fieldName);
+ FieldElement getField(String fieldName) {
+ ensureAccessorsReady();
+ return actualElement.getField(fieldName);
+ }
@override
- PropertyAccessorElement getGetter(String getterName) =>
- actualElement.getGetter(getterName);
+ PropertyAccessorElement getGetter(String getterName) {
+ ensureAccessorsReady();
+ return actualElement.getGetter(getterName);
+ }
@override
- MethodElement getMethod(String methodName) =>
- actualElement.getMethod(methodName);
+ MethodElement getMethod(String methodName) {
+ ensureMethodsReady();
+ return actualElement.getMethod(methodName);
+ }
@override
- ConstructorElement getNamedConstructor(String name) =>
- actualElement.getNamedConstructor(name);
+ ConstructorElement getNamedConstructor(String name) {
+ ensureConstructorsReady();
+ return actualElement.getNamedConstructor(name);
+ }
@override
- PropertyAccessorElement getSetter(String setterName) =>
- actualElement.getSetter(setterName);
+ PropertyAccessorElement getSetter(String setterName) {
+ ensureAccessorsReady();
+ return actualElement.getSetter(setterName);
+ }
@override
bool isSuperConstructorAccessible(ConstructorElement constructor) =>
@@ -128,8 +166,10 @@ class ClassElementHandle extends ElementHandle implements ClassElement {
@override
MethodElement lookUpConcreteMethod(
- String methodName, LibraryElement library) =>
- actualElement.lookUpConcreteMethod(methodName, library);
+ String methodName, LibraryElement library) {
+ ensureMethodsReady();
+ return actualElement.lookUpConcreteMethod(methodName, library);
+ }
@override
PropertyAccessorElement lookUpGetter(
@@ -138,32 +178,44 @@ class ClassElementHandle extends ElementHandle implements ClassElement {
@override
PropertyAccessorElement lookUpInheritedConcreteGetter(
- String methodName, LibraryElement library) =>
- actualElement.lookUpInheritedConcreteGetter(methodName, library);
+ String methodName, LibraryElement library) {
+ ensureAccessorsReady();
+ return actualElement.lookUpInheritedConcreteGetter(methodName, library);
+ }
@override
MethodElement lookUpInheritedConcreteMethod(
- String methodName, LibraryElement library) =>
- actualElement.lookUpInheritedConcreteMethod(methodName, library);
+ String methodName, LibraryElement library) {
+ ensureMethodsReady();
+ return actualElement.lookUpInheritedConcreteMethod(methodName, library);
+ }
@override
PropertyAccessorElement lookUpInheritedConcreteSetter(
- String methodName, LibraryElement library) =>
- actualElement.lookUpInheritedConcreteSetter(methodName, library);
+ String methodName, LibraryElement library) {
+ ensureAccessorsReady();
+ return actualElement.lookUpInheritedConcreteSetter(methodName, library);
+ }
@override
MethodElement lookUpInheritedMethod(
- String methodName, LibraryElement library) =>
- actualElement.lookUpInheritedMethod(methodName, library);
+ String methodName, LibraryElement library) {
+ ensureMethodsReady();
+ return actualElement.lookUpInheritedMethod(methodName, library);
+ }
@override
- MethodElement lookUpMethod(String methodName, LibraryElement library) =>
- actualElement.lookUpMethod(methodName, library);
+ MethodElement lookUpMethod(String methodName, LibraryElement library) {
+ ensureMethodsReady();
+ return actualElement.lookUpMethod(methodName, library);
+ }
@override
PropertyAccessorElement lookUpSetter(
- String setterName, LibraryElement library) =>
- actualElement.lookUpSetter(setterName, library);
+ String setterName, LibraryElement library) {
+ ensureAccessorsReady();
+ return actualElement.lookUpSetter(setterName, library);
+ }
}
/**
@@ -415,8 +467,12 @@ abstract class ElementHandle implements Element {
AstNode computeNode() => actualElement.computeNode();
@override
- Element getAncestor(Predicate<Element> predicate) =>
- actualElement.getAncestor(predicate);
+ Element getAncestor(Predicate<Element> predicate) {
+ if (actualElement == null) {
+ print('No actualElement: $location $runtimeType');
Paul Berry 2016/05/11 22:09:37 Looks like temporary debugging code that should be
+ }
+ return actualElement.getAncestor(predicate);
+ }
@override
String getExtendedDisplayName(String shortName) =>

Powered by Google App Engine
This is Rietveld 408576698