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

Side by Side Diff: pkg/analysis_server/lib/src/edit/edit_domain.dart

Issue 2526473003: Make AnalysisSErver APIs to access unit/node/element asynchronous. (Closed)
Patch Set: Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library edit.domain; 5 library edit.domain;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/plugin/edit/assist/assist_core.dart'; 9 import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
10 import 'package:analysis_server/plugin/edit/assist/assist_dart.dart'; 10 import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 newAnalysisError_fromEngine(lineInfo, error); 194 newAnalysisError_fromEngine(lineInfo, error);
195 AnalysisErrorFixes errorFixes = new AnalysisErrorFixes(serverError); 195 AnalysisErrorFixes errorFixes = new AnalysisErrorFixes(serverError);
196 errorFixesList.add(errorFixes); 196 errorFixesList.add(errorFixes);
197 fixes.forEach((fix) { 197 fixes.forEach((fix) {
198 errorFixes.fixes.add(fix.change); 198 errorFixes.fixes.add(fix.change);
199 }); 199 });
200 } 200 }
201 } 201 }
202 } 202 }
203 } else { 203 } else {
204 CompilationUnit unit = server.getResolvedCompilationUnit(file); 204 CompilationUnit unit = await server.getResolvedCompilationUnit(file);
205 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); 205 engine.AnalysisErrorInfo errorInfo = server.getErrors(file);
206 if (errorInfo != null) { 206 if (errorInfo != null) {
207 LineInfo lineInfo = errorInfo.lineInfo; 207 LineInfo lineInfo = errorInfo.lineInfo;
208 int requestLine = lineInfo.getLocation(offset).lineNumber; 208 int requestLine = lineInfo.getLocation(offset).lineNumber;
209 for (engine.AnalysisError error in errorInfo.errors) { 209 for (engine.AnalysisError error in errorInfo.errors) {
210 int errorLine = lineInfo.getLocation(error.offset).lineNumber; 210 int errorLine = lineInfo.getLocation(error.offset).lineNumber;
211 if (errorLine == requestLine) { 211 if (errorLine == requestLine) {
212 List<Fix> fixes = await computeFixes(server.serverPlugin, 212 List<Fix> fixes = await computeFixes(server.serverPlugin,
213 server.resourceProvider, unit.element.context, error); 213 server.resourceProvider, unit.element.context, error);
214 if (fixes.isNotEmpty) { 214 if (fixes.isNotEmpty) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 if (result == null) { 278 if (result == null) {
279 server.sendResponse(new Response.fileNotAnalyzed(request, file)); 279 server.sendResponse(new Response.fileNotAnalyzed(request, file));
280 return; 280 return;
281 } 281 }
282 fileStamp = -1; 282 fileStamp = -1;
283 code = result.content; 283 code = result.content;
284 unit = result.unit; 284 unit = result.unit;
285 errors = result.errors; 285 errors = result.errors;
286 } else { 286 } else {
287 // prepare resolved unit 287 // prepare resolved unit
288 unit = server.getResolvedCompilationUnit(file); 288 unit = await server.getResolvedCompilationUnit(file);
289 if (unit == null) { 289 if (unit == null) {
290 server.sendResponse(new Response.fileNotAnalyzed(request, file)); 290 server.sendResponse(new Response.fileNotAnalyzed(request, file));
291 return; 291 return;
292 } 292 }
293 // prepare context 293 // prepare context
294 engine.AnalysisContext context = unit.element.context; 294 engine.AnalysisContext context = unit.element.context;
295 Source source = unit.element.source; 295 Source source = unit.element.source;
296 errors = context.computeErrors(source); 296 errors = context.computeErrors(source);
297 // prepare code 297 // prepare code
298 fileStamp = context.getModificationStamp(source); 298 fileStamp = context.getModificationStamp(source);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 int length = params.length; 390 int length = params.length;
391 // add refactoring kinds 391 // add refactoring kinds
392 List<RefactoringKind> kinds = <RefactoringKind>[]; 392 List<RefactoringKind> kinds = <RefactoringKind>[];
393 // try EXTRACT_* 393 // try EXTRACT_*
394 if (length != 0) { 394 if (length != 0) {
395 kinds.add(RefactoringKind.EXTRACT_LOCAL_VARIABLE); 395 kinds.add(RefactoringKind.EXTRACT_LOCAL_VARIABLE);
396 kinds.add(RefactoringKind.EXTRACT_METHOD); 396 kinds.add(RefactoringKind.EXTRACT_METHOD);
397 } 397 }
398 // check elements 398 // check elements
399 { 399 {
400 Element element = server.getElementAtOffset(file, offset); 400 Element element = await server.getElementAtOffset(file, offset);
401 if (element != null) { 401 if (element != null) {
402 // try CONVERT_METHOD_TO_GETTER 402 // try CONVERT_METHOD_TO_GETTER
403 if (element is ExecutableElement) { 403 if (element is ExecutableElement) {
404 Refactoring refactoring = 404 Refactoring refactoring =
405 new ConvertMethodToGetterRefactoring(searchEngine, element); 405 new ConvertMethodToGetterRefactoring(searchEngine, element);
406 RefactoringStatus status = await refactoring.checkInitialConditions(); 406 RefactoringStatus status = await refactoring.checkInitialConditions();
407 if (!status.hasFatalError) { 407 if (!status.hasFatalError) {
408 kinds.add(RefactoringKind.CONVERT_METHOD_TO_GETTER); 408 kinds.add(RefactoringKind.CONVERT_METHOD_TO_GETTER);
409 } 409 }
410 } 410 }
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 this.kind = kind; 697 this.kind = kind;
698 this.file = file; 698 this.file = file;
699 this.offset = offset; 699 this.offset = offset;
700 this.length = length; 700 this.length = length;
701 // simulate an exception 701 // simulate an exception
702 if (test_simulateRefactoringException_init) { 702 if (test_simulateRefactoringException_init) {
703 throw 'A simulated refactoring exception - init.'; 703 throw 'A simulated refactoring exception - init.';
704 } 704 }
705 // create a new Refactoring instance 705 // create a new Refactoring instance
706 if (kind == RefactoringKind.CONVERT_GETTER_TO_METHOD) { 706 if (kind == RefactoringKind.CONVERT_GETTER_TO_METHOD) {
707 Element element = server.getElementAtOffset(file, offset); 707 Element element = await server.getElementAtOffset(file, offset);
708 if (element != null) { 708 if (element != null) {
709 if (element is ExecutableElement) { 709 if (element is ExecutableElement) {
710 _resetOnAnalysisStarted(); 710 _resetOnAnalysisStarted();
711 refactoring = 711 refactoring =
712 new ConvertGetterToMethodRefactoring(searchEngine, element); 712 new ConvertGetterToMethodRefactoring(searchEngine, element);
713 } 713 }
714 } 714 }
715 } 715 }
716 if (kind == RefactoringKind.CONVERT_METHOD_TO_GETTER) { 716 if (kind == RefactoringKind.CONVERT_METHOD_TO_GETTER) {
717 Element element = server.getElementAtOffset(file, offset); 717 Element element = await server.getElementAtOffset(file, offset);
718 if (element != null) { 718 if (element != null) {
719 if (element is ExecutableElement) { 719 if (element is ExecutableElement) {
720 _resetOnAnalysisStarted(); 720 _resetOnAnalysisStarted();
721 refactoring = 721 refactoring =
722 new ConvertMethodToGetterRefactoring(searchEngine, element); 722 new ConvertMethodToGetterRefactoring(searchEngine, element);
723 } 723 }
724 } 724 }
725 } 725 }
726 if (kind == RefactoringKind.EXTRACT_LOCAL_VARIABLE) { 726 if (kind == RefactoringKind.EXTRACT_LOCAL_VARIABLE) {
727 CompilationUnit unit = server.getResolvedCompilationUnit(file); 727 CompilationUnit unit = await server.getResolvedCompilationUnit(file);
728 if (unit != null) { 728 if (unit != null) {
729 _resetOnFileResolutionChanged(file); 729 _resetOnFileResolutionChanged(file);
730 refactoring = new ExtractLocalRefactoring(unit, offset, length); 730 refactoring = new ExtractLocalRefactoring(unit, offset, length);
731 feedback = new ExtractLocalVariableFeedback( 731 feedback = new ExtractLocalVariableFeedback(
732 <String>[], <int>[], <int>[], 732 <String>[], <int>[], <int>[],
733 coveringExpressionOffsets: <int>[], 733 coveringExpressionOffsets: <int>[],
734 coveringExpressionLengths: <int>[]); 734 coveringExpressionLengths: <int>[]);
735 } 735 }
736 } 736 }
737 if (kind == RefactoringKind.EXTRACT_METHOD) { 737 if (kind == RefactoringKind.EXTRACT_METHOD) {
738 CompilationUnit unit = server.getResolvedCompilationUnit(file); 738 CompilationUnit unit = await server.getResolvedCompilationUnit(file);
739 if (unit != null) { 739 if (unit != null) {
740 _resetOnAnalysisStarted(); 740 _resetOnAnalysisStarted();
741 refactoring = 741 refactoring =
742 new ExtractMethodRefactoring(searchEngine, unit, offset, length); 742 new ExtractMethodRefactoring(searchEngine, unit, offset, length);
743 feedback = new ExtractMethodFeedback(offset, length, '', <String>[], 743 feedback = new ExtractMethodFeedback(offset, length, '', <String>[],
744 false, <RefactoringMethodParameter>[], <int>[], <int>[]); 744 false, <RefactoringMethodParameter>[], <int>[], <int>[]);
745 } 745 }
746 } 746 }
747 if (kind == RefactoringKind.INLINE_LOCAL_VARIABLE) { 747 if (kind == RefactoringKind.INLINE_LOCAL_VARIABLE) {
748 CompilationUnit unit = server.getResolvedCompilationUnit(file); 748 CompilationUnit unit = await server.getResolvedCompilationUnit(file);
749 if (unit != null) { 749 if (unit != null) {
750 _resetOnFileResolutionChanged(file); 750 _resetOnFileResolutionChanged(file);
751 refactoring = new InlineLocalRefactoring(searchEngine, unit, offset); 751 refactoring = new InlineLocalRefactoring(searchEngine, unit, offset);
752 } 752 }
753 } 753 }
754 if (kind == RefactoringKind.INLINE_METHOD) { 754 if (kind == RefactoringKind.INLINE_METHOD) {
755 CompilationUnit unit = server.getResolvedCompilationUnit(file); 755 CompilationUnit unit = await server.getResolvedCompilationUnit(file);
756 if (unit != null) { 756 if (unit != null) {
757 _resetOnAnalysisStarted(); 757 _resetOnAnalysisStarted();
758 refactoring = new InlineMethodRefactoring(searchEngine, unit, offset); 758 refactoring = new InlineMethodRefactoring(searchEngine, unit, offset);
759 } 759 }
760 } 760 }
761 if (kind == RefactoringKind.MOVE_FILE) { 761 if (kind == RefactoringKind.MOVE_FILE) {
762 _resetOnAnalysisStarted(); 762 _resetOnAnalysisStarted();
763 ContextSourcePair contextSource = server.getContextSourcePair(file); 763 ContextSourcePair contextSource = server.getContextSourcePair(file);
764 engine.AnalysisContext context = contextSource.context; 764 engine.AnalysisContext context = contextSource.context;
765 Source source = contextSource.source; 765 Source source = contextSource.source;
766 refactoring = new MoveFileRefactoring( 766 refactoring = new MoveFileRefactoring(
767 server.resourceProvider, searchEngine, context, source, file); 767 server.resourceProvider, searchEngine, context, source, file);
768 } 768 }
769 if (kind == RefactoringKind.RENAME) { 769 if (kind == RefactoringKind.RENAME) {
770 AstNode node = server.getNodeAtOffset(file, offset); 770 AstNode node = await server.getNodeAtOffset(file, offset);
771 Element element = server.getElementOfNode(node); 771 Element element = server.getElementOfNode(node);
772 if (node != null && element != null) { 772 if (node != null && element != null) {
773 if (element is FieldFormalParameterElement) { 773 if (element is FieldFormalParameterElement) {
774 element = (element as FieldFormalParameterElement).field; 774 element = (element as FieldFormalParameterElement).field;
775 } 775 }
776 // climb from "Class" in "new Class.named()" to "Class.named" 776 // climb from "Class" in "new Class.named()" to "Class.named"
777 if (node.parent is TypeName && node.parent.parent is ConstructorName) { 777 if (node.parent is TypeName && node.parent.parent is ConstructorName) {
778 ConstructorName constructor = node.parent.parent; 778 ConstructorName constructor = node.parent.parent;
779 node = constructor; 779 node = constructor;
780 element = constructor.staticElement; 780 element = constructor.staticElement;
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 } 934 }
935 return new RefactoringStatus(); 935 return new RefactoringStatus();
936 } 936 }
937 } 937 }
938 938
939 /** 939 /**
940 * [_RefactoringManager] throws instances of this class internally to stop 940 * [_RefactoringManager] throws instances of this class internally to stop
941 * processing in a manager that was reset. 941 * processing in a manager that was reset.
942 */ 942 */
943 class _ResetError {} 943 class _ResetError {}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698