Index: pkg/analyzer_plugin/lib/utilities/navigation/navigation.dart |
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation.dart |
similarity index 50% |
rename from pkg/analyzer_plugin/lib/utilities/navigation.dart |
rename to pkg/analyzer_plugin/lib/utilities/navigation/navigation.dart |
index 4db996a49bbc3fb4274a9e196dc541d289962a9c..a7876195ffa680aeb65dbb0e5cfeda807559c336 100644 |
--- a/pkg/analyzer_plugin/lib/utilities/navigation.dart |
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation.dart |
@@ -2,12 +2,14 @@ |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
-import 'package:analyzer/src/dart/analysis/driver.dart'; |
+import 'package:analyzer/dart/analysis/results.dart'; |
+import 'package:analyzer/file_system/file_system.dart'; |
import 'package:analyzer_plugin/protocol/protocol.dart'; |
import 'package:analyzer_plugin/protocol/protocol_common.dart' |
show ElementKind, Location; |
import 'package:analyzer_plugin/protocol/protocol_generated.dart'; |
-import 'package:analyzer_plugin/src/utilities/navigation.dart'; |
+import 'package:analyzer_plugin/src/utilities/navigation/navigation.dart'; |
+import 'package:analyzer_plugin/utilities/generator.dart'; |
/** |
* An object that [NavigationContributor]s use to record navigation regions. |
@@ -30,12 +32,11 @@ abstract class NavigationCollector { |
*/ |
abstract class NavigationContributor { |
/** |
- * Contribute navigation regions for a subset of the content of the given |
- * [source] into the given [collector]. The subset is specified by the |
- * [offset] and [length]. The [driver] can be used to access analysis results. |
+ * Contribute navigation regions for the portion of the file specified by the |
+ * given [request] into the given [collector]. |
*/ |
- void computeNavigation(NavigationCollector collector, |
- AnalysisDriverGeneric driver, String filePath, int offset, int length); |
+ void computeNavigation( |
+ NavigationRequest request, NavigationCollector collector); |
} |
/** |
@@ -45,36 +46,27 @@ abstract class NavigationContributor { |
*/ |
class NavigationGenerator { |
/** |
- * The driver to be passed in to the contributors. |
- */ |
- final AnalysisDriverGeneric driver; |
- |
- /** |
* The contributors to be used to generate the navigation data. |
*/ |
final List<NavigationContributor> contributors; |
/** |
- * Initialize a newly created navigation generator. |
+ * Initialize a newly created navigation generator to use the given |
+ * [contributors]. |
*/ |
- NavigationGenerator(this.driver, this.contributors); |
+ NavigationGenerator(this.contributors); |
/** |
- * Create an 'analysis.navigation' notification for the file with the given |
- * [filePath]. If any of the contributors throws an exception, also create a |
- * non-fatal 'plugin.error' notification. |
+ * Create an 'analysis.navigation' notification for the portion of the file |
+ * specified by the given [request]. If any of the contributors throws an |
+ * exception, also create a non-fatal 'plugin.error' notification. |
*/ |
- List<Notification> generateNavigationNotification(String filePath) { |
- // TODO(brianwilkerson) Consider not passing a driver in (to either the |
- // NavigationGenerator constructor or computeNavigation) and replace the |
- // filePath with an AnalysisResult that then gets passed in to |
- // computeNavigation. That would allow contributors to use previously |
- // computed results rather than re-compute them. |
+ GeneratorResult generateNavigationNotification(NavigationRequest request) { |
List<Notification> notifications = <Notification>[]; |
NavigationCollectorImpl collector = new NavigationCollectorImpl(); |
for (NavigationContributor contributor in contributors) { |
try { |
- contributor.computeNavigation(collector, driver, filePath, null, null); |
+ contributor.computeNavigation(request, collector); |
} catch (exception, stackTrace) { |
notifications.add(new PluginErrorParams( |
false, exception.toString(), stackTrace.toString()) |
@@ -82,9 +74,39 @@ class NavigationGenerator { |
} |
} |
collector.createRegions(); |
- notifications.add(new AnalysisNavigationParams( |
- filePath, collector.regions, collector.targets, collector.files) |
+ notifications.add(new AnalysisNavigationParams(request.result.path, |
+ collector.regions, collector.targets, collector.files) |
.toNotification()); |
- return notifications; |
+ return new GeneratorResult(null, notifications); |
} |
} |
+ |
+/** |
+ * The information about a requested set of navigation information. |
+ * |
+ * Clients may not extend, implement or mix-in this class. |
+ */ |
+abstract class NavigationRequest { |
+ /** |
+ * Return the length of the region within the source for which navigation |
+ * regions are being requested. |
+ */ |
+ int get length; |
+ |
+ /** |
+ * Return the offset of the region within the source for which navigation |
+ * regions are being requested. |
+ */ |
+ int get offset; |
+ |
+ /** |
+ * Return the resource provider associated with this request. |
+ */ |
+ ResourceProvider get resourceProvider; |
+ |
+ /** |
+ * The analysis result for the file in which the navigation regions are being |
+ * requested. |
+ */ |
+ ResolveResult get result; |
+} |