Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(674)

Unified Diff: pkg/analysis_server/lib/src/domain_analysis.dart

Issue 1303033010: Navigation extension point. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: tweaks Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/lib/src/domain_analysis.dart
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index c0492bf47cdd650559d3ab4d04bb246c6c4cd75c..655ca2fc571b7f81554ebb302bbe81888f09cb50 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -9,12 +9,13 @@ import 'dart:core' hide Resource;
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analysis_server/src/computer/computer_hover.dart';
-import 'package:analysis_server/src/computer/computer_navigation.dart';
import 'package:analysis_server/src/constants.dart';
+import 'package:analysis_server/src/domains/analysis/navigation.dart';
import 'package:analysis_server/src/protocol_server.dart';
import 'package:analysis_server/src/services/dependencies/library_dependencies.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/engine.dart' as engine;
/**
@@ -125,15 +126,15 @@ class AnalysisDomainHandler implements RequestHandler {
if (units.isEmpty) {
server.sendResponse(new Response.getNavigationInvalidFile(request));
} else {
- DartUnitNavigationComputer computer =
- new DartUnitNavigationComputer();
- _GetNavigationAstVisitor visitor = new _GetNavigationAstVisitor(
- params.offset, params.offset + params.length, computer);
- for (CompilationUnit unit in units) {
- unit.accept(visitor);
- }
+ CompilationUnitElement unitElement = units.first.element;
+ NavigationHolderImpl holder = computeNavigation(
+ server,
+ unitElement.context,
+ unitElement.source,
+ params.offset,
+ params.length);
server.sendResponse(new AnalysisGetNavigationResult(
- computer.files, computer.targets, computer.regions)
+ holder.files, holder.targets, holder.regions)
.toResponse(request.id));
}
break;
@@ -290,36 +291,3 @@ class AnalysisDomainHandler implements RequestHandler {
return new AnalysisUpdateOptionsResult().toResponse(request.id);
}
}
-
-/**
- * An AST visitor that computer navigation regions in the givne region.
- */
-class _GetNavigationAstVisitor extends UnifyingAstVisitor {
- final int rangeStart;
- final int rangeEnd;
- final DartUnitNavigationComputer computer;
-
- _GetNavigationAstVisitor(this.rangeStart, this.rangeEnd, this.computer);
-
- bool isInRange(int offset) {
- return rangeStart <= offset && offset <= rangeEnd;
- }
-
- @override
- visitNode(AstNode node) {
- // The node ends before the range starts.
- if (node.end < rangeStart) {
- return;
- }
- // The node starts after the range ends.
- if (node.offset > rangeEnd) {
- return;
- }
- // The node starts or ends in the range.
- if (isInRange(node.offset) || isInRange(node.end)) {
- computer.compute(node);
- return;
- }
- super.visitNode(node);
- }
-}

Powered by Google App Engine
This is Rietveld 408576698