CreateSwitchIntention removed all operations with Document to exclude possible problems

This commit is contained in:
Dmitry Batkovich
2014-06-04 17:02:53 +04:00
parent 4c6818a294
commit aba3f2f262
5 changed files with 7 additions and 19 deletions

View File

@@ -42,20 +42,12 @@ public class CreateSwitchIntention extends BaseElementAtCaretIntentionAction {
final PsiExpressionStatement expressionStatement = resolveExpressionStatement(element);
final PsiElementFactory elementFactory = JavaPsiFacade.getInstance(project).getElementFactory();
PsiSwitchStatement switchStatement = (PsiSwitchStatement)elementFactory
.createStatementFromText(String.format("switch (%s) {\n$MARKER$\n}", expressionStatement.getExpression().getText()), null);
.createStatementFromText(String.format("switch (%s) {}", expressionStatement.getExpression().getText()), null);
switchStatement = (PsiSwitchStatement)expressionStatement.replace(switchStatement);
CodeStyleManager.getInstance(project).reformat(switchStatement);
for (final PsiStatement psiStatement : switchStatement.getBody().getStatements()) {
if (psiStatement.getText().equals("$MARKER$")) {
final Document document = editor.getDocument();
PsiDocumentManager.getInstance(project).doPostponedOperationsAndUnblockDocument(document);
final int textOffset = psiStatement.getTextOffset();
editor.getCaretModel().moveToOffset(textOffset);
document.deleteString(textOffset, textOffset + psiStatement.getTextLength());
return;
}
}
final PsiJavaToken lBrace = switchStatement.getBody().getLBrace();
editor.getCaretModel().moveToOffset(lBrace.getTextOffset() + lBrace.getTextLength());
}
@Override

View File

@@ -5,8 +5,7 @@ class X {
}
void m(MyEnum e) {
switch (e) {
<caret>
switch (e) {<caret>
}
}

View File

@@ -5,8 +5,7 @@ class X {
}
void m(MyEnum e) {
switch (e) {
<caret>
switch (e) {<caret>
}
}

View File

@@ -3,8 +3,7 @@ class X {
void m() {
int foo = 10;
switch (foo) {
<caret>
switch (foo) {<caret>
}
}

View File

@@ -3,8 +3,7 @@ class X {
void m() {
String s = getStr();
switch (s) {
<caret>
switch (s) {<caret>
}
}