| Index: pkg/analyzer/lib/src/dart/analysis/ast_provider_driver.dart
|
| diff --git a/pkg/analyzer/lib/src/dart/analysis/ast_provider_driver.dart b/pkg/analyzer/lib/src/dart/analysis/ast_provider_driver.dart
|
| index 02da9fcf8c51d1da5ba51b8691698f17ada61f4a..ef2aa51bd26dc710cce139e9fb0bcf23a7173130 100644
|
| --- a/pkg/analyzer/lib/src/dart/analysis/ast_provider_driver.dart
|
| +++ b/pkg/analyzer/lib/src/dart/analysis/ast_provider_driver.dart
|
| @@ -11,75 +11,28 @@ import 'package:analyzer/src/dart/ast/utilities.dart';
|
| import 'package:analyzer/src/dart/element/ast_provider.dart';
|
|
|
| abstract class AbstractAstProvider implements AstProvider {
|
| - /**
|
| - * Return the [AstNode] for the given [element] if the given [unit], or
|
| - * `null` if the [element] is not know, or is not defined in the [unit].
|
| - */
|
| @override
|
| - AstNode findNodeForElement(CompilationUnit unit, Element element) {
|
| - AstNode nameNode = new NodeLocator(element.nameOffset).searchWithin(unit);
|
| - if (element is ClassElement) {
|
| - if (element.isEnum) {
|
| - return nameNode.getAncestor((node) => node is EnumDeclaration);
|
| - } else {
|
| - return nameNode.getAncestor(
|
| - (node) => node is ClassDeclaration || node is ClassTypeAlias);
|
| - }
|
| - }
|
| - if (element is ConstructorElement) {
|
| - return nameNode.getAncestor((node) => node is ConstructorDeclaration);
|
| - }
|
| - if (element is FieldElement) {
|
| - if (element.isEnumConstant) {
|
| - return nameNode.getAncestor((node) => node is EnumConstantDeclaration);
|
| - } else {
|
| - return nameNode.getAncestor((node) => node is VariableDeclaration);
|
| - }
|
| - }
|
| - if (element is FunctionElement) {
|
| - return nameNode.getAncestor((node) => node is FunctionDeclaration);
|
| - }
|
| - if (element is FunctionTypeAliasElement) {
|
| - return nameNode.getAncestor((node) => node is FunctionTypeAlias);
|
| - }
|
| - if (element is LocalVariableElement) {
|
| - return nameNode.getAncestor(
|
| - (node) => node is DeclaredIdentifier || node is VariableDeclaration);
|
| - }
|
| - if (element is MethodElement) {
|
| - return nameNode.getAncestor((node) => node is MethodDeclaration);
|
| - }
|
| - if (element is ParameterElement) {
|
| - return nameNode.getAncestor((node) => node is FormalParameter);
|
| - }
|
| - if (element is PropertyAccessorElement) {
|
| - if (element.isSynthetic) {
|
| - return null;
|
| - }
|
| - if (element.enclosingElement is ClassElement) {
|
| - return nameNode.getAncestor((node) => node is MethodDeclaration);
|
| - } else if (element.enclosingElement is CompilationUnitElement) {
|
| - return nameNode.getAncestor((node) => node is FunctionDeclaration);
|
| - }
|
| - return null;
|
| - }
|
| - if (element is TopLevelVariableElement) {
|
| - return nameNode.getAncestor((node) => node is VariableDeclaration);
|
| - }
|
| - return nameNode;
|
| - }
|
| -
|
| - @override
|
| - Future<T> getParsedNodeForElement<T extends AstNode>(Element element) async {
|
| + Future<SimpleIdentifier> getParsedNameForElement(Element element) async {
|
| CompilationUnit unit = await getParsedUnitForElement(element);
|
| - return findNodeForElement(unit, element) as T;
|
| + return _getNameNode(unit, element);
|
| }
|
|
|
| @override
|
| - Future<T> getResolvedNodeForElement<T extends AstNode>(
|
| - Element element) async {
|
| + Future<SimpleIdentifier> getResolvedNameForElement(Element element) async {
|
| CompilationUnit unit = await getResolvedUnitForElement(element);
|
| - return findNodeForElement(unit, element) as T;
|
| + return _getNameNode(unit, element);
|
| + }
|
| +
|
| + SimpleIdentifier _getNameNode(CompilationUnit unit, Element element) {
|
| + int nameOffset = element.nameOffset;
|
| + if (nameOffset == -1) {
|
| + return null;
|
| + }
|
| + AstNode nameNode = new NodeLocator(nameOffset).searchWithin(unit);
|
| + if (nameNode is SimpleIdentifier) {
|
| + return nameNode;
|
| + }
|
| + return null;
|
| }
|
| }
|
|
|
|
|