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

Unified Diff: pkg/analysis_server/lib/src/edit/edit_domain.dart

Issue 2473003003: Implement 'Sort Members' for the new analysis driver. (Closed)
Patch Set: Created 4 years, 1 month 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/edit/edit_domain.dart
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 5906cd10abbc333c7cd2acdc8d97efd419c25fc7..14e552791f90a9c27042fc0c4e66f73c119251be 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -22,6 +22,7 @@ import 'package:analysis_server/src/services/search/search_engine.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/error/error.dart' as engine;
+import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/dart/scanner/scanner.dart' as engine;
import 'package:analyzer/src/error/codes.dart' as engine;
import 'package:analyzer/src/generated/engine.dart' as engine;
@@ -211,7 +212,8 @@ class EditDomainHandler implements RequestHandler {
} else if (requestName == EDIT_ORGANIZE_DIRECTIVES) {
return organizeDirectives(request);
} else if (requestName == EDIT_SORT_MEMBERS) {
- return sortMembers(request);
+ sortMembers(request);
+ return Response.DELAYED_RESPONSE;
}
} on RequestFailure catch (exception) {
return exception.response;
@@ -251,40 +253,60 @@ class EditDomainHandler implements RequestHandler {
return new EditOrganizeDirectivesResult(fileEdit).toResponse(request.id);
}
- Response sortMembers(Request request) {
+ Future<Null> sortMembers(Request request) async {
var params = new EditSortMembersParams.fromRequest(request);
// prepare file
String file = params.file;
if (!engine.AnalysisEngine.isDartFileName(file)) {
- return new Response.sortMembersInvalidFile(request);
- }
- // prepare location
- ContextSourcePair contextSource = server.getContextSourcePair(file);
- engine.AnalysisContext context = contextSource.context;
- Source source = contextSource.source;
- if (context == null || source == null) {
- return new Response.sortMembersInvalidFile(request);
+ server.sendResponse(new Response.sortMembersInvalidFile(request));
}
- // prepare parsed unit
+ // Prepare the file information.
+ int fileStamp;
+ String code;
CompilationUnit unit;
- try {
- unit = context.parseCompilationUnit(source);
- } catch (e) {
- return new Response.sortMembersInvalidFile(request);
+ List<engine.AnalysisError> errors;
+ if (server.options.enableNewAnalysisDriver) {
+ AnalysisDriver driver = server.getAnalysisDriver(file);
+ ParseResult result = await driver.parseFile(file);
+ fileStamp = -1;
+ code = result.content;
+ unit = result.unit;
+ errors = result.errors;
+ } else {
+ // prepare location
+ ContextSourcePair contextSource = server.getContextSourcePair(file);
+ engine.AnalysisContext context = contextSource.context;
+ Source source = contextSource.source;
+ if (context == null || source == null) {
+ server.sendResponse(new Response.sortMembersInvalidFile(request));
+ return;
+ }
+ // prepare code
+ fileStamp = context.getModificationStamp(source);
+ code = context.getContents(source).data;
+ // prepare parsed unit
+ try {
+ unit = context.parseCompilationUnit(source);
+ } catch (e) {
+ server.sendResponse(new Response.sortMembersInvalidFile(request));
+ return;
+ }
+ // Get the errors.
+ errors = context.getErrors(source).errors;
}
- // check if there are scan/parse errors in the file
- engine.AnalysisErrorInfo errors = context.getErrors(source);
- int numScanParseErrors = _getNumberOfScanParseErrors(errors.errors);
+ // Check if there are scan/parse errors in the file.
+ int numScanParseErrors = _getNumberOfScanParseErrors(errors);
if (numScanParseErrors != 0) {
- return new Response.sortMembersParseErrors(request, numScanParseErrors);
+ server.sendResponse(
+ new Response.sortMembersParseErrors(request, numScanParseErrors));
+ return;
}
- // do sort
- int fileStamp = context.getModificationStamp(source);
- String code = context.getContents(source).data;
+ // Do sort.
MemberSorter sorter = new MemberSorter(code, unit);
List<SourceEdit> edits = sorter.sort();
SourceFileEdit fileEdit = new SourceFileEdit(file, fileStamp, edits: edits);
- return new EditSortMembersResult(fileEdit).toResponse(request.id);
+ server.sendResponse(
+ new EditSortMembersResult(fileEdit).toResponse(request.id));
}
Response _getAvailableRefactorings(Request request) {
« no previous file with comments | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | pkg/analysis_server/test/edit/sort_members_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698