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

Unified Diff: pkg/analysis_server/lib/src/services/refactoring/extract_method.dart

Issue 956393002: Issue 20827. Import required type in 'Extract Method' refactoring. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 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
« no previous file with comments | « no previous file | pkg/analysis_server/test/services/refactoring/extract_method_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index c222ff0770b3fad95ab5b9ef9e484b6ff68391b7..2f33fe138cabe14fb2d6e813e5e336115b25c4f2 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -23,9 +23,9 @@ import 'package:analysis_server/src/services/search/search_engine.dart';
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/java_core.dart';
+import 'package:analyzer/src/generated/resolver.dart' show ExitDetector;
import 'package:analyzer/src/generated/scanner.dart';
import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/generated/resolver.dart' show ExitDetector;
const String _TOKEN_SEPARATOR = '\uFFFF';
@@ -67,8 +67,10 @@ class ExtractMethodRefactoringImpl extends RefactoringImpl implements
final int selectionOffset;
final int selectionLength;
CompilationUnitElement unitElement;
+ LibraryElement libraryElement;
SourceRange selectionRange;
CorrectionUtils utils;
+ Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
String returnType;
String name;
@@ -97,6 +99,7 @@ class ExtractMethodRefactoringImpl extends RefactoringImpl implements
ExtractMethodRefactoringImpl(this.searchEngine, this.unit,
this.selectionOffset, this.selectionLength) {
unitElement = unit.element;
+ libraryElement = unitElement.library;
selectionRange = new SourceRange(selectionOffset, selectionLength);
utils = new CorrectionUtils(unit);
}
@@ -214,7 +217,7 @@ class ExtractMethodRefactoringImpl extends RefactoringImpl implements
}
@override
- Future<SourceChange> createChange() {
+ Future<SourceChange> createChange() async {
SourceChange change = new SourceChange(refactoringName);
// replace occurrences with method invocation
for (_Occurrence occurence in _occurrences) {
@@ -309,12 +312,8 @@ class ExtractMethodRefactoringImpl extends RefactoringImpl implements
// expression
if (_selectionExpression != null) {
// add return type
- Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
- // TODO(scheglov) use librariesToImport
- String returnTypeName =
- utils.getExpressionTypeSource(_selectionExpression, librariesToImport);
- if (returnTypeName != null && returnTypeName != 'dynamic') {
- annotations += '${returnTypeName} ';
+ if (returnType.isNotEmpty) {
+ annotations += '$returnType ';
}
// just return expression
declarationSource =
@@ -343,7 +342,8 @@ class ExtractMethodRefactoringImpl extends RefactoringImpl implements
}
}
// done
- return new Future.value(change);
+ addLibraryImports(change, libraryElement, librariesToImport);
+ return change;
}
@override
@@ -384,7 +384,7 @@ class ExtractMethodRefactoringImpl extends RefactoringImpl implements
/**
* Checks if created method will shadow or will be shadowed by other elements.
*/
- Future<RefactoringStatus> _checkPossibleConflicts() {
+ Future<RefactoringStatus> _checkPossibleConflicts() async {
RefactoringStatus result = new RefactoringStatus();
AstNode parent = _parentMember.parent;
// top-level function
@@ -512,6 +512,10 @@ class ExtractMethodRefactoringImpl extends RefactoringImpl implements
return pattern;
}
+ String _getTypeCode(DartType type) {
+ return utils.getTypeSource(type, librariesToImport);
+ }
+
/**
* Initializes [createGetter] flag.
*/
@@ -626,9 +630,7 @@ class ExtractMethodRefactoringImpl extends RefactoringImpl implements
if (_returnType == null) {
returnType = 'void';
} else {
- Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
- // TODO(scheglov) use librariesToImport
- returnType = utils.getTypeSource(_returnType, librariesToImport);
+ returnType = _getTypeCode(_returnType);
}
if (returnType == 'dynamic') {
returnType = '';
@@ -1032,13 +1034,10 @@ class _InitializeParametersVisitor extends GeneralizingAstVisitor<Object> {
ref._parametersMap[variableName];
if (parameter == null) {
DartType parameterType = node.bestType;
- Set<LibraryElement> librariesToImport = new Set<LibraryElement>();
- // TODO(scheglov) use librariesToImport
- String parameterTypeName =
- ref.utils.getTypeSource(parameterType, librariesToImport);
+ String parameterTypeCode = ref._getTypeCode(parameterType);
parameter = new RefactoringMethodParameter(
RefactoringMethodParameterKind.REQUIRED,
- parameterTypeName,
+ parameterTypeCode,
variableName,
id: variableName);
ref._parameters.add(parameter);
« no previous file with comments | « no previous file | pkg/analysis_server/test/services/refactoring/extract_method_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698