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

Unified Diff: pkg/analysis_server/lib/src/services/correction/assist_internal.dart

Issue 843163002: Fixes for linked and exit positions offsets. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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 | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/services/correction/assist_internal.dart
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index e2b74663a46c382e7e220fbba6d738adc0a877c7..17b74b5b6f2378f489ac072c84c85789f283738e 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -1394,6 +1394,8 @@ class AssistProcessor {
// prepare environment
String indentOld = utils.getNodePrefix(firstStatement);
String indentNew = "${indentOld}${utils.getIndent(1)}";
+ String indentedCode =
+ utils.replaceSourceRangeIndent(statementsRange, indentOld, indentNew);
// "block"
{
_addInsertEdit(statementsRange.offset, "${indentOld}{${eol}");
@@ -1405,208 +1407,204 @@ class AssistProcessor {
}
// "if"
{
+ int offset = statementsRange.offset;
+ SourceBuilder sb = new SourceBuilder(file, offset);
+ sb.append(indentOld);
+ sb.append("if (");
{
- int offset = statementsRange.offset;
- SourceBuilder sb = new SourceBuilder(file, offset);
- sb.append(indentOld);
- sb.append("if (");
- {
- sb.startPosition("CONDITION");
- sb.append("condition");
- sb.endPosition();
- }
- sb.append(") {");
- sb.append(eol);
- _insertBuilder(sb);
+ sb.startPosition("CONDITION");
+ sb.append("condition");
+ sb.endPosition();
}
- _addIndentEdit(statementsRange, indentOld, indentNew);
- _addInsertEdit(statementsRange.end, "${indentOld}}${eol}");
- exitPosition = _newPosition(lastStatement.end);
+ sb.append(") {");
+ sb.append(eol);
+ sb.append(indentedCode);
+ sb.append("$indentOld}");
Brian Wilkerson 2015/01/09 22:23:02 nit: It's probably just me, but it seems strange t
scheglov 2015/01/09 22:31:19 Done.
+ exitPosition = _newPosition(sb.offset + sb.length);
+ sb.append(eol);
+ _insertBuilder(sb, statementsRange.length);
// add proposal
_addAssist(AssistKind.SURROUND_WITH_IF, []);
}
// "while"
{
+ int offset = statementsRange.offset;
+ SourceBuilder sb = new SourceBuilder(file, offset);
+ sb.append(indentOld);
+ sb.append("while (");
{
- int offset = statementsRange.offset;
- SourceBuilder sb = new SourceBuilder(file, offset);
- sb.append(indentOld);
- sb.append("while (");
- {
- sb.startPosition("CONDITION");
- sb.append("condition");
- sb.endPosition();
- }
- sb.append(") {");
- sb.append(eol);
- _insertBuilder(sb);
+ sb.startPosition("CONDITION");
+ sb.append("condition");
+ sb.endPosition();
}
- _addIndentEdit(statementsRange, indentOld, indentNew);
- _addInsertEdit(statementsRange.end, "${indentOld}}${eol}");
- exitPosition = _newPosition(lastStatement.end);
+ sb.append(") {");
+ sb.append(eol);
+ sb.append(indentedCode);
+ sb.append("$indentOld}");
+ exitPosition = _newPosition(sb.offset + sb.length);
+ sb.append(eol);
+ _insertBuilder(sb, statementsRange.length);
// add proposal
_addAssist(AssistKind.SURROUND_WITH_WHILE, []);
}
// "for-in"
{
+ int offset = statementsRange.offset;
+ SourceBuilder sb = new SourceBuilder(file, offset);
+ sb.append(indentOld);
+ sb.append("for (var ");
{
- int offset = statementsRange.offset;
- SourceBuilder sb = new SourceBuilder(file, offset);
- sb.append(indentOld);
- sb.append("for (var ");
- {
- sb.startPosition("NAME");
- sb.append("item");
- sb.endPosition();
- }
- sb.append(" in ");
- {
- sb.startPosition("ITERABLE");
- sb.append("iterable");
- sb.endPosition();
- }
- sb.append(") {");
- sb.append(eol);
- _insertBuilder(sb);
+ sb.startPosition("NAME");
+ sb.append("item");
+ sb.endPosition();
}
- _addIndentEdit(statementsRange, indentOld, indentNew);
- _addInsertEdit(statementsRange.end, "${indentOld}}${eol}");
- exitPosition = _newPosition(lastStatement.end);
+ sb.append(" in ");
+ {
+ sb.startPosition("ITERABLE");
+ sb.append("iterable");
+ sb.endPosition();
+ }
+ sb.append(") {");
+ sb.append(eol);
+ sb.append(indentedCode);
+ sb.append("$indentOld}");
+ exitPosition = _newPosition(sb.offset + sb.length);
+ sb.append(eol);
+ _insertBuilder(sb, statementsRange.length);
// add proposal
_addAssist(AssistKind.SURROUND_WITH_FOR_IN, []);
}
// "for"
{
+ int offset = statementsRange.offset;
+ SourceBuilder sb = new SourceBuilder(file, offset);
+ sb.append(indentOld);
+ sb.append("for (var ");
{
- int offset = statementsRange.offset;
- SourceBuilder sb = new SourceBuilder(file, offset);
- sb.append(indentOld);
- sb.append("for (var ");
- {
- sb.startPosition("VAR");
- sb.append("v");
- sb.endPosition();
- }
- sb.append(" = ");
- {
- sb.startPosition("INIT");
- sb.append("init");
- sb.endPosition();
- }
- sb.append("; ");
- {
- sb.startPosition("CONDITION");
- sb.append("condition");
- sb.endPosition();
- }
- sb.append("; ");
- {
- sb.startPosition("INCREMENT");
- sb.append("increment");
- sb.endPosition();
- }
- sb.append(") {");
- sb.append(eol);
- _insertBuilder(sb);
+ sb.startPosition("VAR");
+ sb.append("v");
+ sb.endPosition();
}
- _addIndentEdit(statementsRange, indentOld, indentNew);
- _addInsertEdit(statementsRange.end, "${indentOld}}${eol}");
- exitPosition = _newPosition(lastStatement.end);
+ sb.append(" = ");
+ {
+ sb.startPosition("INIT");
+ sb.append("init");
+ sb.endPosition();
+ }
+ sb.append("; ");
+ {
+ sb.startPosition("CONDITION");
+ sb.append("condition");
+ sb.endPosition();
+ }
+ sb.append("; ");
+ {
+ sb.startPosition("INCREMENT");
+ sb.append("increment");
+ sb.endPosition();
+ }
+ sb.append(") {");
+ sb.append(eol);
+ sb.append(indentedCode);
+ sb.append("$indentOld}");
+ exitPosition = _newPosition(sb.offset + sb.length);
+ sb.append(eol);
+ _insertBuilder(sb, statementsRange.length);
// add proposal
_addAssist(AssistKind.SURROUND_WITH_FOR, []);
}
// "do-while"
{
- _addInsertEdit(statementsRange.offset, "${indentOld}do {${eol}");
- _addIndentEdit(statementsRange, indentOld, indentNew);
+ int offset = statementsRange.offset;
+ SourceBuilder sb = new SourceBuilder(file, offset);
+ sb.append(indentOld);
+ sb.append("do {");
+ sb.append(eol);
+ sb.append(indentedCode);
+ sb.append(indentOld);
+ sb.append("} while (");
{
- int offset = statementsRange.end;
- SourceBuilder sb = new SourceBuilder(file, offset);
- sb.append(indentOld);
- sb.append("} while (");
- {
- sb.startPosition("CONDITION");
- sb.append("condition");
- sb.endPosition();
- }
- sb.append(");");
- sb.append(eol);
- _insertBuilder(sb);
+ sb.startPosition("CONDITION");
+ sb.append("condition");
+ sb.endPosition();
}
- exitPosition = _newPosition(lastStatement.end);
+ sb.append(");");
+ exitPosition = _newPosition(sb.offset + sb.length);
+ sb.append(eol);
+ _insertBuilder(sb, statementsRange.length);
// add proposal
_addAssist(AssistKind.SURROUND_WITH_DO_WHILE, []);
}
// "try-catch"
{
- _addInsertEdit(statementsRange.offset, "${indentOld}try {${eol}");
- _addIndentEdit(statementsRange, indentOld, indentNew);
+ int offset = statementsRange.offset;
+ SourceBuilder sb = new SourceBuilder(file, offset);
+ sb.append(indentOld);
+ sb.append("try {");
+ sb.append(eol);
+ sb.append(indentedCode);
+ sb.append(indentOld);
+ sb.append("} on ");
{
- int offset = statementsRange.end;
- SourceBuilder sb = new SourceBuilder(file, offset);
- sb.append(indentOld);
- sb.append("} on ");
- {
- sb.startPosition("EXCEPTION_TYPE");
- sb.append("Exception");
- sb.endPosition();
- }
- sb.append(" catch (");
- {
- sb.startPosition("EXCEPTION_VAR");
- sb.append("e");
- sb.endPosition();
- }
- sb.append(") {");
- sb.append(eol);
- //
- sb.append(indentNew);
- {
- sb.startPosition("CATCH");
- sb.append("// TODO");
- sb.endPosition();
- sb.setExitOffset();
- }
- sb.append(eol);
- //
- sb.append(indentOld);
- sb.append("}");
- sb.append(eol);
- //
- _insertBuilder(sb);
- exitPosition = _newPosition(sb.exitOffset);
+ sb.startPosition("EXCEPTION_TYPE");
+ sb.append("Exception");
+ sb.endPosition();
+ }
+ sb.append(" catch (");
+ {
+ sb.startPosition("EXCEPTION_VAR");
+ sb.append("e");
+ sb.endPosition();
}
+ sb.append(") {");
+ sb.append(eol);
+ //
+ sb.append(indentNew);
+ {
+ sb.startPosition("CATCH");
+ sb.append("// TODO");
+ sb.endPosition();
+ sb.setExitOffset();
+ }
+ sb.append(eol);
+ //
+ sb.append(indentOld);
+ sb.append("}");
+ sb.append(eol);
+ _insertBuilder(sb, statementsRange.length);
// add proposal
_addAssist(AssistKind.SURROUND_WITH_TRY_CATCH, []);
}
// "try-finally"
{
- _addInsertEdit(statementsRange.offset, "${indentOld}try {${eol}");
- _addIndentEdit(statementsRange, indentOld, indentNew);
+ int offset = statementsRange.offset;
+ SourceBuilder sb = new SourceBuilder(file, offset);
+ //
+ sb.append(indentOld);
+ sb.append("try {");
+ sb.append(eol);
+ //
+ sb.append(indentedCode);
+ //
+ sb.append(indentOld);
+ sb.append("} finally {");
+ sb.append(eol);
+ //
+ sb.append(indentNew);
{
- int offset = statementsRange.end;
- SourceBuilder sb = new SourceBuilder(file, offset);
- //
- sb.append(indentOld);
- sb.append("} finally {");
- sb.append(eol);
- //
- sb.append(indentNew);
- {
- sb.startPosition("FINALLY");
- sb.append("// TODO");
- sb.endPosition();
- }
+ sb.startPosition("FINALLY");
+ sb.append("// TODO");
+ sb.endPosition();
sb.setExitOffset();
- sb.append(eol);
- //
- sb.append(indentOld);
- sb.append("}");
- sb.append(eol);
- //
- _insertBuilder(sb);
- exitPosition = _newPosition(sb.exitOffset);
}
+ sb.setExitOffset();
+ sb.append(eol);
+ //
+ sb.append(indentOld);
+ sb.append("}");
+ sb.append(eol);
+ //
+ _insertBuilder(sb, statementsRange.length);
// add proposal
_addAssist(AssistKind.SURROUND_WITH_TRY_FINALLY, []);
}
@@ -1670,9 +1668,12 @@ class AssistProcessor {
/**
* Inserts the given [SourceBuilder] at its offset.
*/
- void _insertBuilder(SourceBuilder builder) {
- String text = builder.toString();
- _addInsertEdit(builder.offset, text);
+ void _insertBuilder(SourceBuilder builder, [int length = 0]) {
+ {
+ SourceRange range = rangeStartLength(builder.offset, length);
+ String text = builder.toString();
+ _addReplaceEdit(range, text);
+ }
// add linked positions
builder.linkedPositionGroups.forEach((String id, LinkedEditGroup group) {
LinkedEditGroup fixGroup = _getLinkedPosition(id);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698