Chromium Code Reviews| Index: pkg/analysis_server/lib/src/services/correction/assist.dart |
| diff --git a/pkg/analysis_server/lib/src/services/correction/assist.dart b/pkg/analysis_server/lib/src/services/correction/assist.dart |
| index f84e1f7af1d7a86fe5e645bf867603d78676a6c9..859b39258fdd55ba8242e6a654aec355600fbc54 100644 |
| --- a/pkg/analysis_server/lib/src/services/correction/assist.dart |
| +++ b/pkg/analysis_server/lib/src/services/correction/assist.dart |
| @@ -4,43 +4,43 @@ |
| library services.correction.assist; |
| -import 'package:analysis_server/src/protocol.dart'; |
| -import 'package:analysis_server/src/services/correction/assist_internal.dart'; |
| -import 'package:analyzer/src/generated/ast.dart'; |
| +import 'package:analysis_server/edit/assist/assist_core.dart'; |
| +import 'package:analysis_server/src/plugin/server_plugin.dart'; |
| +import 'package:analyzer/src/generated/engine.dart'; |
| +import 'package:analyzer/src/generated/java_engine.dart'; |
| import 'package:analyzer/src/generated/source.dart'; |
| /** |
| - * Computes [Assist]s at the given location. |
| - * |
| - * Returns the computed [Assist]s, not `null`. |
| + * Compute and return the assists available at the given selection (described by |
| + * the [offset] and [length]) in the given [source]. The source was analyzed in |
| + * the given [context]. The [plugin] is used to get the list of assist |
| + * contributors. |
| */ |
| -List<Assist> computeAssists(CompilationUnit unit, int offset, int length) { |
| - Source source = unit.element.source; |
| - String file = source.fullName; |
| - AssistProcessor processor = |
| - new AssistProcessor(source, file, unit, offset, length); |
| - return processor.compute(); |
| -} |
| - |
| -/** |
| - * A description of a single proposed assist. |
| - */ |
| -class Assist { |
| - final AssistKind kind; |
| - final SourceChange change; |
| - |
| - Assist(this.kind, this.change); |
| - |
| - @override |
| - String toString() { |
| - return 'Assist(kind=$kind, change=$change)'; |
| +List<Assist> computeAssists(ServerPlugin plugin, AnalysisContext context, |
| + Source source, int offset, int length) { |
| + List<Assist> fixes = <Assist>[]; |
|
scheglov
2015/04/11 00:25:01
assists
Brian Wilkerson
2015/04/13 15:17:58
Done
|
| + List<AssistContributor> contributors = plugin.assistContributors(); |
| + for (AssistContributor contributor in contributors) { |
| + try { |
| + List<Assist> contributedFixes = |
|
scheglov
2015/04/11 00:25:02
contributedAssists
Brian Wilkerson
2015/04/13 15:17:58
Done
|
| + contributor.compute(context, source, offset, length); |
| + if (contributedFixes != null) { |
| + fixes.addAll(contributedFixes); |
| + } |
| + } catch (exception, stackTrace) { |
| + AnalysisEngine.instance.logger.logError( |
| + 'Exception from fix contributor: ${contributor.runtimeType}', |
|
scheglov
2015/04/11 00:25:02
assist contributor
Brian Wilkerson
2015/04/13 15:17:58
Done
|
| + new CaughtException(exception, stackTrace)); |
| + } |
| } |
| + fixes.sort(Assist.SORT_BY_RELEVANCE); |
| + return fixes; |
| } |
| /** |
| - * An enumeration of possible quick assist kinds. |
| + * An enumeration of possible assist kinds. |
| */ |
| -class AssistKind { |
| +class DartAssistKind { |
| static const ADD_PART_DIRECTIVE = |
| const AssistKind('ADD_PART_DIRECTIVE', 30, "Add 'part' directive"); |
| static const ADD_TYPE_ANNOTATION = |
| @@ -103,13 +103,4 @@ class AssistKind { |
| 'SURROUND_WITH_TRY_FINALLY', 30, "Surround with 'try-finally'"); |
| static const SURROUND_WITH_WHILE = |
| const AssistKind('SURROUND_WITH_WHILE', 30, "Surround with 'while'"); |
| - |
| - final name; |
| - final int relevance; |
| - final String message; |
| - |
| - const AssistKind(this.name, this.relevance, this.message); |
| - |
| - @override |
| - String toString() => name; |
| } |