| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |