Chromium Code Reviews| 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) => |