| Index: packages/analyzer/lib/src/generated/element_resolver.dart
|
| diff --git a/analyzer/lib/src/generated/element_resolver.dart b/packages/analyzer/lib/src/generated/element_resolver.dart
|
| similarity index 95%
|
| rename from analyzer/lib/src/generated/element_resolver.dart
|
| rename to packages/analyzer/lib/src/generated/element_resolver.dart
|
| index b93931f940e6ffe92b5622d00da32b6335e92823..ab8fe91b9e3428a78338182cce69b4f509325084 100644
|
| --- a/analyzer/lib/src/generated/element_resolver.dart
|
| +++ b/packages/analyzer/lib/src/generated/element_resolver.dart
|
| @@ -161,20 +161,20 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| _lookUpMethod(leftHandSide, propagatedType, methodName);
|
| node.propagatedElement = propagatedMethod;
|
| if (_shouldReportMissingMember(staticType, staticMethod)) {
|
| - _recordUndefinedToken(staticType.element,
|
| - StaticTypeWarningCode.UNDEFINED_METHOD, operator, [
|
| - methodName,
|
| - staticType.displayName
|
| - ]);
|
| + _recordUndefinedToken(
|
| + staticType.element,
|
| + StaticTypeWarningCode.UNDEFINED_METHOD,
|
| + operator,
|
| + [methodName, staticType.displayName]);
|
| } else if (_enableHints &&
|
| _shouldReportMissingMember(propagatedType, propagatedMethod) &&
|
| !_memberFoundInSubclass(
|
| propagatedType.element, methodName, true, false)) {
|
| - _recordUndefinedToken(propagatedType.element,
|
| - HintCode.UNDEFINED_METHOD, operator, [
|
| - methodName,
|
| - propagatedType.displayName
|
| - ]);
|
| + _recordUndefinedToken(
|
| + propagatedType.element,
|
| + HintCode.UNDEFINED_METHOD,
|
| + operator,
|
| + [methodName, propagatedType.displayName]);
|
| }
|
| }
|
| }
|
| @@ -203,6 +203,7 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| setMetadata(node.element, node);
|
| return null;
|
| }
|
| +
|
| @override
|
| Object visitClassTypeAlias(ClassTypeAlias node) {
|
| setMetadata(node.element, node);
|
| @@ -494,8 +495,13 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| node.staticElement = setterStaticMethod;
|
| node.propagatedElement = setterPropagatedMethod;
|
| // generate undefined method warning
|
| - _checkForUndefinedIndexOperator(node, target, getterMethodName,
|
| - setterStaticMethod, setterPropagatedMethod, staticType,
|
| + _checkForUndefinedIndexOperator(
|
| + node,
|
| + target,
|
| + getterMethodName,
|
| + setterStaticMethod,
|
| + setterPropagatedMethod,
|
| + staticType,
|
| propagatedType);
|
| // lookup getter method
|
| MethodElement getterStaticMethod =
|
| @@ -507,8 +513,13 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| new AuxiliaryElements(getterStaticMethod, getterPropagatedMethod);
|
| node.auxiliaryElements = auxiliaryElements;
|
| // generate undefined method warning
|
| - _checkForUndefinedIndexOperator(node, target, getterMethodName,
|
| - getterStaticMethod, getterPropagatedMethod, staticType,
|
| + _checkForUndefinedIndexOperator(
|
| + node,
|
| + target,
|
| + getterMethodName,
|
| + getterStaticMethod,
|
| + getterPropagatedMethod,
|
| + staticType,
|
| propagatedType);
|
| } else if (isInGetterContext) {
|
| // lookup getter method
|
| @@ -592,7 +603,8 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| _isDeferredPrefix(target)) {
|
| if (node.operator.type == sc.TokenType.QUESTION_PERIOD) {
|
| _resolver.reportErrorForNode(
|
| - CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT, target,
|
| + CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT,
|
| + target,
|
| [(target as SimpleIdentifier).name]);
|
| }
|
| LibraryElement importedLibrary = _getImportedLibrary(target);
|
| @@ -608,7 +620,7 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| // does not apply to conditional method invocation (i.e. 'C?.m(...)').
|
| //
|
| bool isConditional = node.operator.type == sc.TokenType.QUESTION_PERIOD;
|
| - ClassElementImpl typeReference = getTypeReference(target, isConditional);
|
| + ClassElementImpl typeReference = getTypeReference(target);
|
| if (typeReference != null) {
|
| staticElement =
|
| propagatedElement = _resolveElement(typeReference, methodName);
|
| @@ -721,10 +733,8 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| ErrorCode proxyErrorCode = (generatedWithTypePropagation
|
| ? HintCode.UNDEFINED_METHOD
|
| : StaticTypeWarningCode.UNDEFINED_METHOD);
|
| - _recordUndefinedNode(targetType.element, proxyErrorCode, methodName, [
|
| - methodName.name,
|
| - targetTypeName
|
| - ]);
|
| + _recordUndefinedNode(targetType.element, proxyErrorCode, methodName,
|
| + [methodName.name, targetTypeName]);
|
| }
|
| } else if (identical(
|
| errorCode, StaticTypeWarningCode.UNDEFINED_SUPER_METHOD)) {
|
| @@ -766,17 +776,17 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| node.propagatedElement = propagatedMethod;
|
| if (_shouldReportMissingMember(staticType, staticMethod)) {
|
| if (operand is SuperExpression) {
|
| - _recordUndefinedToken(staticType.element,
|
| - StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR, node.operator, [
|
| - methodName,
|
| - staticType.displayName
|
| - ]);
|
| + _recordUndefinedToken(
|
| + staticType.element,
|
| + StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR,
|
| + node.operator,
|
| + [methodName, staticType.displayName]);
|
| } else {
|
| - _recordUndefinedToken(staticType.element,
|
| - StaticTypeWarningCode.UNDEFINED_OPERATOR, node.operator, [
|
| - methodName,
|
| - staticType.displayName
|
| - ]);
|
| + _recordUndefinedToken(
|
| + staticType.element,
|
| + StaticTypeWarningCode.UNDEFINED_OPERATOR,
|
| + node.operator,
|
| + [methodName, staticType.displayName]);
|
| }
|
| } else if (_enableHints &&
|
| _shouldReportMissingMember(propagatedType, propagatedMethod) &&
|
| @@ -856,7 +866,7 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| // Otherwise, the prefix is really an expression that happens to be a simple
|
| // identifier and this is really equivalent to a property access node.
|
| //
|
| - _resolvePropertyAccess(prefix, identifier, false);
|
| + _resolvePropertyAccess(prefix, identifier);
|
| return null;
|
| }
|
|
|
| @@ -879,27 +889,27 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| node.propagatedElement = propagatedMethod;
|
| if (_shouldReportMissingMember(staticType, staticMethod)) {
|
| if (operand is SuperExpression) {
|
| - _recordUndefinedToken(staticType.element,
|
| - StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR, operator, [
|
| - methodName,
|
| - staticType.displayName
|
| - ]);
|
| + _recordUndefinedToken(
|
| + staticType.element,
|
| + StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR,
|
| + operator,
|
| + [methodName, staticType.displayName]);
|
| } else {
|
| - _recordUndefinedToken(staticType.element,
|
| - StaticTypeWarningCode.UNDEFINED_OPERATOR, operator, [
|
| - methodName,
|
| - staticType.displayName
|
| - ]);
|
| + _recordUndefinedToken(
|
| + staticType.element,
|
| + StaticTypeWarningCode.UNDEFINED_OPERATOR,
|
| + operator,
|
| + [methodName, staticType.displayName]);
|
| }
|
| } else if (_enableHints &&
|
| _shouldReportMissingMember(propagatedType, propagatedMethod) &&
|
| !_memberFoundInSubclass(
|
| propagatedType.element, methodName, true, false)) {
|
| - _recordUndefinedToken(propagatedType.element,
|
| - HintCode.UNDEFINED_OPERATOR, operator, [
|
| - methodName,
|
| - propagatedType.displayName
|
| - ]);
|
| + _recordUndefinedToken(
|
| + propagatedType.element,
|
| + HintCode.UNDEFINED_OPERATOR,
|
| + operator,
|
| + [methodName, propagatedType.displayName]);
|
| }
|
| }
|
| return null;
|
| @@ -912,8 +922,7 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| return null;
|
| }
|
| SimpleIdentifier propertyName = node.propertyName;
|
| - _resolvePropertyAccess(target, propertyName,
|
| - node.operator.type == sc.TokenType.QUESTION_PERIOD);
|
| + _resolvePropertyAccess(target, propertyName);
|
| return null;
|
| }
|
|
|
| @@ -1006,7 +1015,8 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| CompileTimeErrorCode.INVALID_ANNOTATION, annotation);
|
| } else if (element is PrefixElement) {
|
| _resolver.reportErrorForNode(
|
| - CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT, node,
|
| + CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT,
|
| + node,
|
| [element.name]);
|
| } else {
|
| _recordUndefinedNode(_resolver.enclosingClass,
|
| @@ -1053,14 +1063,14 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| !enclosingClass.isSuperConstructorAccessible(element))) {
|
| if (name != null) {
|
| _resolver.reportErrorForNode(
|
| - CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER, node, [
|
| - superType.displayName,
|
| - name
|
| - ]);
|
| + CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER,
|
| + node,
|
| + [superType.displayName, name]);
|
| } else {
|
| _resolver.reportErrorForNode(
|
| CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT,
|
| - node, [superType.displayName]);
|
| + node,
|
| + [superType.displayName]);
|
| }
|
| return null;
|
| } else {
|
| @@ -1198,9 +1208,13 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| * the target of the expression. The [methodName] is the name of the operator
|
| * associated with the context of using of the given index expression.
|
| */
|
| - bool _checkForUndefinedIndexOperator(IndexExpression expression,
|
| - Expression target, String methodName, MethodElement staticMethod,
|
| - MethodElement propagatedMethod, DartType staticType,
|
| + bool _checkForUndefinedIndexOperator(
|
| + IndexExpression expression,
|
| + Expression target,
|
| + String methodName,
|
| + MethodElement staticMethod,
|
| + MethodElement propagatedMethod,
|
| + DartType staticType,
|
| DartType propagatedType) {
|
| bool shouldReportMissingMember_static =
|
| _shouldReportMissingMember(staticType, staticMethod);
|
| @@ -1227,17 +1241,13 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| DartType type =
|
| shouldReportMissingMember_static ? staticType : propagatedType;
|
| if (leftBracket == null || rightBracket == null) {
|
| - _recordUndefinedNode(type.element, errorCode, expression, [
|
| - methodName,
|
| - type.displayName
|
| - ]);
|
| + _recordUndefinedNode(type.element, errorCode, expression,
|
| + [methodName, type.displayName]);
|
| } else {
|
| int offset = leftBracket.offset;
|
| int length = rightBracket.offset - offset + 1;
|
| - _recordUndefinedOffset(type.element, errorCode, offset, length, [
|
| - methodName,
|
| - type.displayName
|
| - ]);
|
| + _recordUndefinedOffset(type.element, errorCode, offset, length,
|
| + [methodName, type.displayName]);
|
| }
|
| return true;
|
| }
|
| @@ -1582,8 +1592,10 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| * been examined, used to prevent infinite recursion and to optimize the
|
| * search.
|
| */
|
| - PropertyAccessorElement _lookUpGetterInInterfaces(InterfaceType targetType,
|
| - bool includeTargetType, String getterName,
|
| + PropertyAccessorElement _lookUpGetterInInterfaces(
|
| + InterfaceType targetType,
|
| + bool includeTargetType,
|
| + String getterName,
|
| HashSet<ClassElement> visitedInterfaces) {
|
| // TODO(brianwilkerson) This isn't correct. Section 8.1.1 of the
|
| // specification (titled "Inheritance and Overriding" under "Interfaces")
|
| @@ -1656,8 +1668,10 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| * interfaces that have been examined, used to prevent infinite recursion and
|
| * to optimize the search.
|
| */
|
| - ExecutableElement _lookUpGetterOrMethodInInterfaces(InterfaceType targetType,
|
| - bool includeTargetType, String memberName,
|
| + ExecutableElement _lookUpGetterOrMethodInInterfaces(
|
| + InterfaceType targetType,
|
| + bool includeTargetType,
|
| + String memberName,
|
| HashSet<ClassElement> visitedInterfaces) {
|
| // TODO(brianwilkerson) This isn't correct. Section 8.1.1 of the
|
| // specification (titled "Inheritance and Overriding" under "Interfaces")
|
| @@ -1737,8 +1751,10 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| * been examined, used to prevent infinite recursion and to optimize the
|
| * search.
|
| */
|
| - MethodElement _lookUpMethodInInterfaces(InterfaceType targetType,
|
| - bool includeTargetType, String methodName,
|
| + MethodElement _lookUpMethodInInterfaces(
|
| + InterfaceType targetType,
|
| + bool includeTargetType,
|
| + String methodName,
|
| HashSet<ClassElement> visitedInterfaces) {
|
| // TODO(brianwilkerson) This isn't correct. Section 8.1.1 of the
|
| // specification (titled "Inheritance and Overriding" under "Interfaces")
|
| @@ -1815,8 +1831,10 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| * been examined, used to prevent infinite recursion and to optimize the
|
| * search.
|
| */
|
| - PropertyAccessorElement _lookUpSetterInInterfaces(InterfaceType targetType,
|
| - bool includeTargetType, String setterName,
|
| + PropertyAccessorElement _lookUpSetterInInterfaces(
|
| + InterfaceType targetType,
|
| + bool includeTargetType,
|
| + String setterName,
|
| HashSet<ClassElement> visitedInterfaces) {
|
| // TODO(brianwilkerson) This isn't correct. Section 8.1.1 of the
|
| // specification (titled "Inheritance and Overriding" under "Interfaces")
|
| @@ -2012,8 +2030,8 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| // Class(args)
|
| if (element1 is ClassElement) {
|
| ClassElement classElement = element1;
|
| - constructor = new InterfaceTypeImpl(classElement).lookUpConstructor(
|
| - null, _definingLibrary);
|
| + constructor = new InterfaceTypeImpl(classElement)
|
| + .lookUpConstructor(null, _definingLibrary);
|
| }
|
| }
|
| //
|
| @@ -2041,8 +2059,8 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| // Class.constructor(args)
|
| if (element1 is ClassElement) {
|
| ClassElement classElement = element1;
|
| - constructor = new InterfaceTypeImpl(classElement).lookUpConstructor(
|
| - nameNode2.name, _definingLibrary);
|
| + constructor = new InterfaceTypeImpl(classElement)
|
| + .lookUpConstructor(nameNode2.name, _definingLibrary);
|
| nameNode2.staticElement = constructor;
|
| }
|
| }
|
| @@ -2065,8 +2083,8 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| return;
|
| }
|
| // prefix.Class.constructor(args)
|
| - constructor = new InterfaceTypeImpl(classElement).lookUpConstructor(
|
| - name3, _definingLibrary);
|
| + constructor = new InterfaceTypeImpl(classElement)
|
| + .lookUpConstructor(name3, _definingLibrary);
|
| nameNode3.staticElement = constructor;
|
| }
|
| }
|
| @@ -2189,19 +2207,15 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| ErrorCode errorCode = (reportError
|
| ? CompileTimeErrorCode.NOT_ENOUGH_REQUIRED_ARGUMENTS
|
| : StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS);
|
| - _resolver.reportErrorForNode(errorCode, argumentList, [
|
| - requiredParameters.length,
|
| - positionalArgumentCount
|
| - ]);
|
| + _resolver.reportErrorForNode(errorCode, argumentList,
|
| + [requiredParameters.length, positionalArgumentCount]);
|
| } else if (positionalArgumentCount > unnamedParameterCount &&
|
| noBlankArguments) {
|
| ErrorCode errorCode = (reportError
|
| ? CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS
|
| : StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS);
|
| - _resolver.reportErrorForNode(errorCode, argumentList, [
|
| - unnamedParameterCount,
|
| - positionalArgumentCount
|
| - ]);
|
| + _resolver.reportErrorForNode(errorCode, argumentList,
|
| + [unnamedParameterCount, positionalArgumentCount]);
|
| }
|
| return resolvedParameters;
|
| }
|
| @@ -2219,27 +2233,27 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| node.propagatedElement = propagatedMethod;
|
| if (_shouldReportMissingMember(staticType, staticMethod)) {
|
| if (leftOperand is SuperExpression) {
|
| - _recordUndefinedToken(staticType.element,
|
| - StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR, node.operator, [
|
| - methodName,
|
| - staticType.displayName
|
| - ]);
|
| + _recordUndefinedToken(
|
| + staticType.element,
|
| + StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR,
|
| + node.operator,
|
| + [methodName, staticType.displayName]);
|
| } else {
|
| - _recordUndefinedToken(staticType.element,
|
| - StaticTypeWarningCode.UNDEFINED_OPERATOR, node.operator, [
|
| - methodName,
|
| - staticType.displayName
|
| - ]);
|
| + _recordUndefinedToken(
|
| + staticType.element,
|
| + StaticTypeWarningCode.UNDEFINED_OPERATOR,
|
| + node.operator,
|
| + [methodName, staticType.displayName]);
|
| }
|
| } else if (_enableHints &&
|
| _shouldReportMissingMember(propagatedType, propagatedMethod) &&
|
| !_memberFoundInSubclass(
|
| propagatedType.element, methodName, true, false)) {
|
| - _recordUndefinedToken(propagatedType.element,
|
| - HintCode.UNDEFINED_OPERATOR, node.operator, [
|
| - methodName,
|
| - propagatedType.displayName
|
| - ]);
|
| + _recordUndefinedToken(
|
| + propagatedType.element,
|
| + HintCode.UNDEFINED_OPERATOR,
|
| + node.operator,
|
| + [methodName, propagatedType.displayName]);
|
| }
|
| }
|
| }
|
| @@ -2372,7 +2386,8 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| if (isConditional) {
|
| _resolver.reportErrorForNode(
|
| CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT,
|
| - target, [target.name]);
|
| + target,
|
| + [target.name]);
|
| }
|
| //
|
| // Look to see whether the name of the method is really part of a
|
| @@ -2416,7 +2431,7 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| }
|
|
|
| void _resolvePropertyAccess(
|
| - Expression target, SimpleIdentifier propertyName, bool isConditional) {
|
| + Expression target, SimpleIdentifier propertyName) {
|
| DartType staticType = _getStaticType(target);
|
| DartType propagatedType = _getPropagatedType(target);
|
| Element staticElement = null;
|
| @@ -2427,7 +2442,7 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| // hierarchy, instead we just look for the member in the type only. This
|
| // does not apply to conditional property accesses (i.e. 'C?.m').
|
| //
|
| - ClassElementImpl typeReference = getTypeReference(target, isConditional);
|
| + ClassElementImpl typeReference = getTypeReference(target);
|
| if (typeReference != null) {
|
| // TODO(brianwilkerson) Why are we setting the propagated element here?
|
| // It looks wrong.
|
| @@ -2481,7 +2496,8 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| return;
|
| } else if (classElement.isEnum && propertyName.name == "_name") {
|
| _resolver.reportErrorForNode(
|
| - CompileTimeErrorCode.ACCESS_PRIVATE_ENUM_FIELD, propertyName,
|
| + CompileTimeErrorCode.ACCESS_PRIVATE_ENUM_FIELD,
|
| + propertyName,
|
| [propertyName.name]);
|
| return;
|
| }
|
| @@ -2508,10 +2524,8 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| } else {
|
| errorCode = HintCode.UNDEFINED_SETTER;
|
| }
|
| - _recordUndefinedNode(declaringElement, errorCode, propertyName, [
|
| - propertyName.name,
|
| - displayType.displayName
|
| - ]);
|
| + _recordUndefinedNode(declaringElement, errorCode, propertyName,
|
| + [propertyName.name, displayType.displayName]);
|
| } else if (propertyName.inGetterContext()) {
|
| ErrorCode errorCode;
|
| if (shouldReportMissingMember_static) {
|
| @@ -2531,13 +2545,13 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| } else {
|
| errorCode = HintCode.UNDEFINED_GETTER;
|
| }
|
| - _recordUndefinedNode(declaringElement, errorCode, propertyName, [
|
| - propertyName.name,
|
| - displayType.displayName
|
| - ]);
|
| + _recordUndefinedNode(declaringElement, errorCode, propertyName,
|
| + [propertyName.name, displayType.displayName]);
|
| } else {
|
| - _recordUndefinedNode(declaringElement,
|
| - StaticWarningCode.UNDEFINED_IDENTIFIER, propertyName,
|
| + _recordUndefinedNode(
|
| + declaringElement,
|
| + StaticWarningCode.UNDEFINED_IDENTIFIER,
|
| + propertyName,
|
| [propertyName.name]);
|
| }
|
| }
|
| @@ -2640,12 +2654,10 @@ class ElementResolver extends SimpleAstVisitor<Object> {
|
| /**
|
| * Checks whether the given [expression] is a reference to a class. If it is
|
| * then the element representing the class is returned, otherwise `null` is
|
| - * returned. [isConditional] indicates whether [expression] is to the left
|
| - * of a '?.' opertator.
|
| + * returned.
|
| */
|
| - static ClassElementImpl getTypeReference(
|
| - Expression expression, bool isConditional) {
|
| - if (!isConditional && expression is Identifier) {
|
| + static ClassElementImpl getTypeReference(Expression expression) {
|
| + if (expression is Identifier) {
|
| Element staticElement = expression.staticElement;
|
| if (staticElement is ClassElementImpl) {
|
| return staticElement;
|
|
|