| Index: pkg/analysis_server/lib/src/analysis_server.dart
|
| diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
|
| index 7d709744b443e5203398a9b9e0d9f75a6a1abff9..83e66f4e469fb4acbcdfddab6d64d06be72d8738 100644
|
| --- a/pkg/analysis_server/lib/src/analysis_server.dart
|
| +++ b/pkg/analysis_server/lib/src/analysis_server.dart
|
| @@ -706,41 +706,36 @@ class AnalysisServer {
|
| }
|
|
|
| /**
|
| - * Returns [Element]s at the given [offset] of the given [file].
|
| - *
|
| - * May be empty if cannot be resolved, but not `null`.
|
| + * Return the [Element] at the given [offset] of the given [file], or `null`
|
| + * if there is no node at the [offset] or the node does not have an element.
|
| */
|
| - List<Element> getElementsAtOffset(String file, int offset) {
|
| - List<AstNode> nodes = getNodesAtOffset(file, offset);
|
| - return getElementsOfNodes(nodes);
|
| + Element getElementAtOffset(String file, int offset) {
|
| + AstNode node = getNodeAtOffset(file, offset);
|
| + return getElementOfNode(node);
|
| }
|
|
|
| /**
|
| - * Returns [Element]s of the given [nodes].
|
| - *
|
| - * May be empty if not resolved, but not `null`.
|
| + * Return the [Element] of the given [node], or `null` if [node] is `null` or
|
| + * does not have an element.
|
| */
|
| - List<Element> getElementsOfNodes(List<AstNode> nodes) {
|
| - List<Element> elements = <Element>[];
|
| - for (AstNode node in nodes) {
|
| - if (node is SimpleIdentifier && node.parent is LibraryIdentifier) {
|
| - node = node.parent;
|
| - }
|
| - if (node is LibraryIdentifier) {
|
| - node = node.parent;
|
| - }
|
| - if (node is StringLiteral && node.parent is UriBasedDirective) {
|
| - continue;
|
| - }
|
| - Element element = ElementLocator.locate(node);
|
| - if (node is SimpleIdentifier && element is PrefixElement) {
|
| - element = getImportElement(node);
|
| - }
|
| - if (element != null) {
|
| - elements.add(element);
|
| - }
|
| + Element getElementOfNode(AstNode node) {
|
| + if (node == null) {
|
| + return null;
|
| + }
|
| + if (node is SimpleIdentifier && node.parent is LibraryIdentifier) {
|
| + node = node.parent;
|
| + }
|
| + if (node is LibraryIdentifier) {
|
| + node = node.parent;
|
| + }
|
| + if (node is StringLiteral && node.parent is UriBasedDirective) {
|
| + return null;
|
| }
|
| - return elements;
|
| + Element element = ElementLocator.locate(node);
|
| + if (node is SimpleIdentifier && element is PrefixElement) {
|
| + element = getImportElement(node);
|
| + }
|
| + return element;
|
| }
|
|
|
| /**
|
| @@ -770,49 +765,35 @@ class AnalysisServer {
|
| }
|
|
|
| /**
|
| - * Returns resolved [AstNode]s at the given [offset] of the given [file].
|
| - *
|
| - * May be empty, but not `null`.
|
| - */
|
| - List<AstNode> getNodesAtOffset(String file, int offset) {
|
| - List<CompilationUnit> units = getResolvedCompilationUnits(file);
|
| - List<AstNode> nodes = <AstNode>[];
|
| - for (CompilationUnit unit in units) {
|
| - AstNode node = new NodeLocator(offset).searchWithin(unit);
|
| - if (node != null) {
|
| - nodes.add(node);
|
| - }
|
| + * Return the resolved [AstNode]s at the given [offset] of the given [file],
|
| + * or `null` if there is no node as the [offset].
|
| + */
|
| + AstNode getNodeAtOffset(String file, int offset) {
|
| + CompilationUnit unit = getResolvedCompilationUnit(file);
|
| + if (unit != null) {
|
| + return new NodeLocator(offset).searchWithin(unit);
|
| }
|
| - return nodes;
|
| + return null;
|
| }
|
|
|
| /**
|
| - * Returns resolved [CompilationUnit]s of the Dart file with the given [path].
|
| - *
|
| - * May be empty, but not `null`.
|
| + * Return the resolved [CompilationUnit] for the Dart file with the given
|
| + * [path], or `null` if the file is not a Dart file or cannot be resolved.
|
| */
|
| - List<CompilationUnit> getResolvedCompilationUnits(String path) {
|
| - List<CompilationUnit> units = <CompilationUnit>[];
|
| + CompilationUnit getResolvedCompilationUnit(String path) {
|
| ContextSourcePair contextSource = getContextSourcePair(path);
|
| - // prepare AnalysisContext
|
| AnalysisContext context = contextSource.context;
|
| if (context == null) {
|
| - return units;
|
| + return null;
|
| }
|
| - // add a unit for each unit/library combination
|
| - runWithActiveContext(context, () {
|
| + return runWithActiveContext(context, () {
|
| Source unitSource = contextSource.source;
|
| List<Source> librarySources = context.getLibrariesContaining(unitSource);
|
| for (Source librarySource in librarySources) {
|
| - CompilationUnit unit =
|
| - context.resolveCompilationUnit2(unitSource, librarySource);
|
| - if (unit != null) {
|
| - units.add(unit);
|
| - }
|
| + return context.resolveCompilationUnit2(unitSource, librarySource);
|
| }
|
| + return null;
|
| });
|
| - // done
|
| - return units;
|
| }
|
|
|
| // TODO(brianwilkerson) Add the following method after 'prioritySources' has
|
|
|