| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'package:analysis_server/plugin/analysis/occurrences/occurrences_core.dar
t'; | 5 import 'package:analysis_server/plugin/analysis/occurrences/occurrences_core.dar
t'; |
| 6 import 'package:analysis_server/src/protocol_server.dart' as protocol; | 6 import 'package:analysis_server/src/protocol_server.dart' as protocol; |
| 7 import 'package:analyzer/dart/ast/ast.dart'; | 7 import 'package:analyzer/dart/ast/ast.dart'; |
| 8 import 'package:analyzer/dart/ast/visitor.dart'; | 8 import 'package:analyzer/dart/ast/visitor.dart'; |
| 9 import 'package:analyzer/dart/element/element.dart'; | 9 import 'package:analyzer/dart/element/element.dart'; |
| 10 import 'package:analyzer/src/dart/element/element.dart'; | 10 import 'package:analyzer/src/dart/element/element.dart'; |
| 11 import 'package:analyzer/src/dart/element/member.dart'; | 11 import 'package:analyzer/src/dart/element/member.dart'; |
| 12 import 'package:analyzer/src/generated/engine.dart'; | |
| 13 import 'package:analyzer/src/generated/source.dart'; | |
| 14 | 12 |
| 15 void addDartOccurrences(OccurrencesCollector collector, CompilationUnit unit) { | 13 void addDartOccurrences(OccurrencesCollector collector, CompilationUnit unit) { |
| 16 _DartUnitOccurrencesComputerVisitor visitor = | 14 _DartUnitOccurrencesComputerVisitor visitor = |
| 17 new _DartUnitOccurrencesComputerVisitor(); | 15 new _DartUnitOccurrencesComputerVisitor(); |
| 18 unit.accept(visitor); | 16 unit.accept(visitor); |
| 19 visitor.elementsOffsets.forEach((engineElement, offsets) { | 17 visitor.elementsOffsets.forEach((engineElement, offsets) { |
| 20 int length = engineElement.nameLength; | 18 int length = engineElement.nameLength; |
| 21 protocol.Element serverElement = protocol.convertElement(engineElement); | 19 protocol.Element serverElement = protocol.convertElement(engineElement); |
| 22 protocol.Occurrences occurrences = | 20 protocol.Occurrences occurrences = |
| 23 new protocol.Occurrences(serverElement, offsets, length); | 21 new protocol.Occurrences(serverElement, offsets, length); |
| 24 collector.addOccurrences(occurrences); | 22 collector.addOccurrences(occurrences); |
| 25 }); | 23 }); |
| 26 } | 24 } |
| 27 | 25 |
| 28 /** | |
| 29 * A computer for occurrences in a Dart [CompilationUnit]. | |
| 30 */ | |
| 31 class DartOccurrencesComputer implements OccurrencesContributor { | |
| 32 @override | |
| 33 void computeOccurrences( | |
| 34 OccurrencesCollector collector, AnalysisContext context, Source source) { | |
| 35 List<Source> libraries = context.getLibrariesContaining(source); | |
| 36 if (libraries.isNotEmpty) { | |
| 37 CompilationUnit unit = | |
| 38 context.getResolvedCompilationUnit2(source, libraries.first); | |
| 39 if (unit != null) { | |
| 40 addDartOccurrences(collector, unit); | |
| 41 } | |
| 42 } | |
| 43 } | |
| 44 } | |
| 45 | |
| 46 class _DartUnitOccurrencesComputerVisitor extends RecursiveAstVisitor { | 26 class _DartUnitOccurrencesComputerVisitor extends RecursiveAstVisitor { |
| 47 final Map<Element, List<int>> elementsOffsets = <Element, List<int>>{}; | 27 final Map<Element, List<int>> elementsOffsets = <Element, List<int>>{}; |
| 48 | 28 |
| 49 @override | 29 @override |
| 50 visitSimpleIdentifier(SimpleIdentifier node) { | 30 visitSimpleIdentifier(SimpleIdentifier node) { |
| 51 Element element = node.bestElement; | 31 Element element = node.bestElement; |
| 52 if (element != null) { | 32 if (element != null) { |
| 53 _addOccurrence(element, node.offset); | 33 _addOccurrence(element, node.offset); |
| 54 } | 34 } |
| 55 return super.visitSimpleIdentifier(node); | 35 return super.visitSimpleIdentifier(node); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 74 } | 54 } |
| 75 if (element is PropertyAccessorElement) { | 55 if (element is PropertyAccessorElement) { |
| 76 element = (element as PropertyAccessorElement).variable; | 56 element = (element as PropertyAccessorElement).variable; |
| 77 } | 57 } |
| 78 if (element is Member) { | 58 if (element is Member) { |
| 79 element = (element as Member).baseElement; | 59 element = (element as Member).baseElement; |
| 80 } | 60 } |
| 81 return element; | 61 return element; |
| 82 } | 62 } |
| 83 } | 63 } |
| OLD | NEW |