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

Side by Side Diff: pkg/analysis_server/lib/src/services/refactoring/extract_local.dart

Issue 580273002: Push add*Edit helpers into SourceChange. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 3 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 unified diff | Download patch | Annotate | Revision Log
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 services.src.refactoring.extract_local; 5 library services.src.refactoring.extract_local;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/src/protocol.dart' hide Element; 9 import 'package:analysis_server/src/protocol.dart' hide Element;
10 import 'package:analysis_server/src/services/correction/name_suggestion.dart'; 10 import 'package:analysis_server/src/services/correction/name_suggestion.dart';
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 } else { 116 } else {
117 occurrences = [selectionRange]; 117 occurrences = [selectionRange];
118 } 118 }
119 // If the whole expression of a statement is selected, like '1 + 2', 119 // If the whole expression of a statement is selected, like '1 + 2',
120 // then convert it into a variable declaration statement. 120 // then convert it into a variable declaration statement.
121 if (wholeStatementExpression && occurrences.length == 1) { 121 if (wholeStatementExpression && occurrences.length == 1) {
122 String keyword = _declarationKeyword; 122 String keyword = _declarationKeyword;
123 String declarationSource = '$keyword $name = '; 123 String declarationSource = '$keyword $name = ';
124 SourceEdit edit = 124 SourceEdit edit =
125 new SourceEdit(singleExpression.offset, 0, declarationSource); 125 new SourceEdit(singleExpression.offset, 0, declarationSource);
126 addElementSourceChange(change, unitElement, edit); 126 change.addElementEdit(unitElement, edit);
127 return new Future.value(change); 127 return new Future.value(change);
128 } 128 }
129 // add variable declaration 129 // add variable declaration
130 { 130 {
131 String declarationSource; 131 String declarationSource;
132 if (stringLiteralPart != null) { 132 if (stringLiteralPart != null) {
133 declarationSource = "var $name = '$stringLiteralPart';"; 133 declarationSource = "var $name = '$stringLiteralPart';";
134 } else { 134 } else {
135 String keyword = _declarationKeyword; 135 String keyword = _declarationKeyword;
136 String initializerSource = utils.getRangeText(selectionRange); 136 String initializerSource = utils.getRangeText(selectionRange);
(...skipping 15 matching lines...) Expand all
152 target_ = commonParent.getAncestor((node) => node is Statement); 152 target_ = commonParent.getAncestor((node) => node is Statement);
153 } 153 }
154 } 154 }
155 } 155 }
156 AstNode target = target_; 156 AstNode target = target_;
157 // insert variable declaration 157 // insert variable declaration
158 if (target is Statement) { 158 if (target is Statement) {
159 String prefix = utils.getNodePrefix(target); 159 String prefix = utils.getNodePrefix(target);
160 SourceEdit edit = 160 SourceEdit edit =
161 new SourceEdit(target.offset, 0, declarationSource + eol + prefix); 161 new SourceEdit(target.offset, 0, declarationSource + eol + prefix);
162 addElementSourceChange(change, unitElement, edit); 162 change.addElementEdit(unitElement, edit);
163 } else if (target is ExpressionFunctionBody) { 163 } else if (target is ExpressionFunctionBody) {
164 String prefix = utils.getNodePrefix(target.parent); 164 String prefix = utils.getNodePrefix(target.parent);
165 String indent = utils.getIndent(1); 165 String indent = utils.getIndent(1);
166 String declStatement = prefix + indent + declarationSource + eol; 166 String declStatement = prefix + indent + declarationSource + eol;
167 String exprStatement = prefix + indent + 'return '; 167 String exprStatement = prefix + indent + 'return ';
168 Expression expr = target.expression; 168 Expression expr = target.expression;
169 addElementSourceChange( 169 change.addElementEdit(
170 change,
171 unitElement, 170 unitElement,
172 new SourceEdit( 171 new SourceEdit(
173 target.offset, 172 target.offset,
174 expr.offset - target.offset, 173 expr.offset - target.offset,
175 '{' + eol + declStatement + exprStatement)); 174 '{' + eol + declStatement + exprStatement));
176 addElementSourceChange( 175 change.addElementEdit(
177 change,
178 unitElement, 176 unitElement,
179 new SourceEdit(expr.end, 0, ';' + eol + prefix + '}')); 177 new SourceEdit(expr.end, 0, ';' + eol + prefix + '}'));
180 } 178 }
181 } 179 }
182 // prepare replacement 180 // prepare replacement
183 String occurrenceReplacement = name; 181 String occurrenceReplacement = name;
184 if (stringLiteralPart != null) { 182 if (stringLiteralPart != null) {
185 occurrenceReplacement = "\${$name}"; 183 occurrenceReplacement = "\${$name}";
186 } 184 }
187 // replace occurrences with variable reference 185 // replace occurrences with variable reference
188 for (SourceRange range in occurrences) { 186 for (SourceRange range in occurrences) {
189 SourceEdit edit = new SourceEdit.range(range, occurrenceReplacement); 187 SourceEdit edit = new SourceEdit.range(range, occurrenceReplacement);
190 addElementSourceChange(change, unitElement, edit); 188 change.addElementEdit(unitElement, edit);
191 } 189 }
192 // done 190 // done
193 return new Future.value(change); 191 return new Future.value(change);
194 } 192 }
195 193
196 @override 194 @override
197 bool requiresPreview() => false; 195 bool requiresPreview() => false;
198 196
199 /** 197 /**
200 * Checks if [selectionRange] selects [Expression] which can be extracted, and 198 * Checks if [selectionRange] selects [Expression] which can be extracted, and
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 Token startToken = nodeTokens[startTokenIndex]; 560 Token startToken = nodeTokens[startTokenIndex];
563 Token endToken = nodeTokens[endTokenIndex]; 561 Token endToken = nodeTokens[endTokenIndex];
564 // add occurrence range 562 // add occurrence range
565 int occuStart = nodeOffset + startToken.offset; 563 int occuStart = nodeOffset + startToken.offset;
566 int occuEnd = nodeOffset + endToken.end; 564 int occuEnd = nodeOffset + endToken.end;
567 SourceRange occuRange = rangeStartEnd(occuStart, occuEnd); 565 SourceRange occuRange = rangeStartEnd(occuStart, occuEnd);
568 _addOccurrence(occuRange); 566 _addOccurrence(occuRange);
569 } 567 }
570 } 568 }
571 } 569 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698